前言
为了业务可靠性,在阿里云搭建了一套Zabbix,使用阿里云RDS(MySql 8.0)作为数据库,根据Zabbix官方文档,使用utf8mb4作为字符集,但创建库时并未要求选择排序规则集,故引发“警告”级告警“数据库中表的字符集或排序规则不受支持”
解决方案
第一步:调整数据库字符集和排列规则
首先登录指定库,本文以zabbix作为示例库名,如使用RDS产品可使用DMS进行登录,
参考Zabbix官方文档Zabbix用户手册中第二章第二节内容:修复Zabbix数据库字符集与排序规则
首先停止Zabbix服务,在对数据库进行备份后,查询当前所使用的字符集和排序规则,执行sql指令:
SELECT @@character_set_database, @@collation_database;
返回结果参考如下所示:
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4 | utf8mb4_0900_ai_ci |
+--------------------------+----------------------+
根据返回结果得知,默认字符集为utf8mb4,排序规则utf8mb4_0900_ai_ci,当前字符集符合要求,但是排序规则需要变更。
调整数据库字符集(character)和排序规则(collation),执行sql指令:
alter database ‘zabbix’ character set utf8mb4 collate utf8mb4_bin;
请注意
如涉及变更字符集,可能会导致数据库内容问题,需要将此库进行全量备份并进行离线调整,此部分内容未包含在本文之中
再次执行“查询当前所使用的字符集和排序规则”指令,返回结果已符合要求。
第二步:调整表排列规则
启动Zabbix服务,各项功能运行正常,警告并为消除。停止Zabbix服务。
执行sql指令,匹配zabbix库中排列规则为utf8mb4_0900_ai_ci的表并输出语句
SELECT CONCAT("ALTER TABLE ", TABLE_NAME," CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;") AS ExecuteTheString FROM information_schema.`COLUMNS` WHERE table_schema ="zabbix" AND COLLATION_NAME ="utf8mb4_0900_ai_ci";
输出语句类似于如下所示的若干:
ALTER TABLE widget_field CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
将所有输出的语句复制并执行,即可完成对所有不符合要求表的排列规则调整。
启动Zabbix服务,告警消失。
发表回复