Неподдерживаемая кодовая страница или тип сравнения для таблиц: < длинный список таблиц >то же самое на английском
Unsupported charset or collation for tables: < длинный список таблиц >и в логе
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Это происходит из-за того, что в базе данных MySQL используется кодировка отличная от utf-8. Исправляется это буквално за несколько минут.
Возвращемся на версию Zabbix до неудачного обновления. В теории это должно сработать и без отката на предыдущую версию.
Для восстановления нормального функционирования нужно остановить Zabbix-server
systemctl stop zabbix-serverПосле этого нужно сгенерировать скрипт конвертации базы данных, для этого понадобится выполнить 2 запроса к БД.
SELECT CONCAT('ALTER TABLE ',
table_schema,
'.',
table_name,
' COLLATE=utf8_bin;') AS cmd
FROM (SELECT table_schema,
table_name,
table_collation
FROM information_schema.tables t
WHERE table_schema = 'zabbix'
AND table_collation != 'utf8_bin') AS tables
ORDER BY cmd;
SELECT CONCAT('ALTER TABLE ',
table_schema,
'.',
table_name,
' MODIFY COLUMN ',
column_name,
' ',
column_type,
' CHARACTER SET utf8 COLLATE utf8_bin',
defaultval,
nullable,
';') AS cmd
FROM (SELECT table_schema,
table_name,
column_name,
collation_name,
character_set_name,
column_type,
column_default,
CASE
WHEN column_default IS NULL THEN ''
ELSE CONCAT(' DEFAULT ''', column_default, ''' ')
END AS defaultval,
CASE
WHEN is_nullable = 'NO' THEN ' NOT NULL '
ELSE ''
END AS nullable
FROM information_schema.columns
WHERE table_schema = 'zabbix'
AND ( collation_name != 'utf8_bin'
OR character_set_name != 'utf8' )) AS cols
ORDER BY cmd;
Текст запросов сохраним в файл /tmp/alter.sql, а результат его выполнения в /tmp/fix.sql.
Выполним запросы к базе данных с именем zabbix и получим файл с командами конвертации таблиц.
mysql -hlocalhost -uzabbix -pzabbixpass zabbix < /tmp/alter.sql > /tmp/fix.sqlИмя пользователя, пароль и адрес сервера можно посмотреть в файле zabbix.conf.php.
В результате файл /tmp/fix.sql будет содержать список sql-запросов, но помимо полезного там будет две строки, содержащих заголовок столбца cmd, которые нам не нужны. Поэтому удалим их из файла
ex +g/cmd/d -cwq /tmp/fix.sqlТеперь выполним конвертацию базы данных
mysql -hlocalhost -uzabbix -pzabbixpass zabbix < /tmp/fix.sqlКогда выполнение скрипта будет завершено, на всякий случай укажем кодировку базы данных по умолчанию.
mysql -hlocalhost -uzabbix -pzabbixpass zabbix
MiraDB> ALTER DATABASE `zabbix` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
Всё готово, запускаем Zabbix-server
systemctl start zabbix-serverПроверяем, что всё хорошо, и пробуем снова обновить Zabbix.
Комментариев нет:
Отправить комментарий