Некоторое время назад столкнулся с ошибкой в web интерфейсе Zabbix после очередного обновления сервера. Текст ошибки в веб интерфейсе - Неподдерживаемая кодовая страница или тип сравнения для таблиц. То же самое было на английском языке в логе - character set name or collation name that is not supported by Zabbix found in 379 column(s) of database "zabbix", only character set "utf8" and collation "utf8_bin" should be used in database.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Выглядела ошибка вот так.
В принципе, по тексту ошибки все понятно. Таблицы в базе данных почему-то имеют не ту кодировку, которая нужна. Работает при этом все нормально. Операционная система - Centos 8.
Стал решать проблему в лоб. Взял и изменил кодировку у всех таблиц в базе данных Zabbix. На деле это оказалось не такой простой задачей, как виделось изначально. В итоге поступил следующим образом. Вводим в консоли Mysql следующую команду:
SELECT CONCAT( 'ALTER TABLE `', t.`TABLE_SCHEMA` , '`.`', t.`TABLE_NAME` , '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;' ) AS sqlcode FROM `information_schema`.`TABLES` t WHERE 1 AND t.`TABLE_SCHEMA` = 'zabbix' ORDER BY 1 LIMIT 0 , 180;
Работа этой команды сформирует на выходе набор из команд для перекодировки каждой таблицы в отдельности. Их нужно все запустить. Если делать все через phpmyadmin, то не возникает проблем. Все команды копируются разом и исполняются. Если будете делать через консоль сервера, то придется как-то обрабатывать вывод, чтобы подать его потом на вход. Надо будет от лишних символов очищать.
Не забудьте сделать бэкап базы данных перед тем, как начнете с ней что-то делать.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Кстати, скрипт не все таблицы переделывает, у меня почему то половина осталась со старой кодировкой. :(
Скрипт просто формирует вывод, состоящий из команд на смену кодировки для каждой базы. Он сам ничего не делает. Вы вручную потом команды исполняете.
Да я понимаю, просто он выдает не все таблицы в базе. проблема была в "LIMIT 90 , 180;" она ограничивала количество выводимых строк.
Если сделать так:
То получится готовый sql файлик, который можно запустить:
source /var/lib/mysql-files/conv.sql
все это просто из консоли mysql
Оу, я ошибся. Надо было не 90 , 180 ставить, а 0, 180. А так он только с 90-й таблицы подготовил вывод.
А зачем там вообще это ограничение?
Из другой задачи пришло. Там нужно было разделить на части, так как не удобно было работать с большим списком. Я просто взял готовый вариант.
По документации база должна быть в UTF8/utf8_bin если отличаются, при робновлении будет большой геморрой - неоднократно сталкивался.
Да, все верно. Zabbix хочет конкретную кодировку и на другие ругается.
utf8mb4 универсальнее. И сейчас по-дефолту в mysql\mariadb. Индексы, конечно, место будут занимать больше, но это плата за универсальность.
С этой кодировкой я и получил описанную ошибку. Как раз дефолтные настройки базы стояли.