[[toc]]
适用范围
8.0.30
问题概述
客户生产环境安装了一套企业版MYSQL一主一从环境,但是客户想在出现故障时,能够自动将从库变为主为。在MYSQL体系中,曾经有一个工具包MySQL Utilities ,里面有一款mysqlfailover 工具,可以监控主库down 掉后,将从库提升为主库。而且在5.7的环境中也有不少用户在使用这款工具。 便是在mysql8.0.30 环境中却不能使用。
问题原因
1.MySQL Failover 需求
主从需要开启GTID模式(mysql 应使用5.6.5以上版本) 所有的slave端需要配置以下参数,建议主库也添加(切换后主从模式变化)
report-host
report-port
master-info-repository=TABLE
relay-log-info-repository=TABLE
这些参考生产环境都满足
2.问题
问题一 : 不支持caching_sha2_password
mysql 8.0 默认使用的是caching_sha2_password 密码插件,但是 failover 账户不能使用 caching_sha2_password 插件。 错误如下:
“Authentication plugin ‘caching_sha2_password’ is not supported”, -1
#修改静态参数
mysql> show variables like '%default_authentication_plugin%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
vi my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
重启mysql
mysql> show variables like '%default_authentication_plugin%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.01 sec)
问题二:不支持utf8mb3字符集
错误如下:
[root@s2ahumysqlpg02 log]# mysqlfailover --master=repuser:repuser@'192.168.xxx.xxx':3306 --discover-slaves-login=failover:pass default_authentication_plugin
WARNING: Using a password on the command line interface can be insecure.
2022-09-29 21:54:47 PM CRITICAL Character set 'utf8mb3' unsupported.
ERROR: Character set 'utf8mb3' unsupported.
查看系统字符集:
mysql> show variables like '%character%';
+--------------------------+-----------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /u01/mysql8/mysql-8.0.30-linux-glibc2.12-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------------+
8 rows in set (0.01 se
#注意 character_set_system 是记录的元数据的字符集,无法直接更改,否则在启动的时候会有如下错误
2022-09-29T22:13:56.352761+08:00 0 [ERROR] [MY-000067] [Server] unknown variable 'character_set_system=utf8mb4'.
2022-09-29T22:13:56.352815+08:00 0 [ERROR] [MY-010119] [Server] Aborting
经过文档确认character_set_system 是记录的元数据的字符集,不能修改

解决方案
- 从上面分析得出至少mysql不法改变character_set_system 参数,而反过去看MySQL Utilities 工具包,最新的是2017年的1.6.5版本.到目录没有更新,所以基本可以推断,MySQL Utilities至少目前不支持mysql-8.0.30. 除非可以更改MySQL Utilities代码!
- 由于mysql 切换并不复杂, 比较难的是如何判断主库是真的down掉,还是hang住,还是网络被隔离。为了满足客户需求,通过shell 脚本满跑客户单向切换的需求。
参考文档
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_character_set_system
http://dev.mysql.com/downloads/utilities/
最后修改时间:2022-10-06 22:24:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




