Home » Zabbix » Ошибка в Zabbix - Неподдерживаемая кодовая страница

Ошибка в Zabbix - Неподдерживаемая кодовая страница

Некоторое время назад столкнулся с ошибкой в 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.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом "Administrator Linux. Professional" в OTUS. Курс не для новичков, для поступления нужно пройти .

Выглядела ошибка вот так.

Неподдерживаемая кодовая страница или тип сравнения для таблиц

В принципе, по тексту ошибки все понятно. Таблицы в базе данных почему-то имеют не ту кодировку, которая нужна. Работает при этом все нормально. Операционная система - Centos 8.

character set name or collation name that is not supported by Zabbix found in 379 column(s) of database "zabbix"

Стал решать проблему в лоб. Взял и изменил кодировку у всех таблиц в базе данных 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, то не возникает проблем. Все команды копируются разом и исполняются. Если будете делать через консоль сервера, то придется как-то обрабатывать вывод, чтобы подать его потом на вход. Надо будет от лишних символов очищать.

Не забудьте сделать бэкап базы данных перед тем, как начнете с ней что-то делать.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом "Administrator Linux. Professional" в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

10 комментариев

  1. MBear

    Кстати, скрипт не все таблицы переделывает, у меня почему то половина осталась со старой кодировкой. :(

    • Zerox

      Скрипт просто формирует вывод, состоящий из команд на смену кодировки для каждой базы. Он сам ничего не делает. Вы вручную потом команды исполняете.

      • MBear

        Да я понимаю, просто он выдает не все таблицы в базе. проблема была в "LIMIT 90 , 180;" она ограничивала количество выводимых строк.

        Если сделать так:

        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 into outfile '/var/lib/mysql-files/conv.sql';

        То получится готовый sql файлик, который можно запустить:
        source /var/lib/mysql-files/conv.sql

        все это просто из консоли mysql

        • Zerox

          Оу, я ошибся. Надо было не 90 , 180 ставить, а 0, 180. А так он только с 90-й таблицы подготовил вывод.

          • MBear

            А зачем там вообще это ограничение?

            • Zerox

              Из другой задачи пришло. Там нужно было разделить на части, так как не удобно было работать с большим списком. Я просто взял готовый вариант.

  2. MBear

    По документации база должна быть в UTF8/utf8_bin если отличаются, при робновлении будет большой геморрой - неоднократно сталкивался.

  3. Аватар

    utf8mb4 универсальнее. И сейчас по-дефолту в mysql\mariadb. Индексы, конечно, место будут занимать больше, но это плата за универсальность.

    • Zerox

      С этой кодировкой я и получил описанную ошибку. Как раз дефолтные настройки базы стояли.

Добавить комментарий

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.