暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

mysql failover自动切换不支持8.0.30

原创 Asher.Hu 2022-10-06
1351

[[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 是记录的元数据的字符集,不能修改
image.png

解决方案

  1. 从上面分析得出至少mysql不法改变character_set_system 参数,而反过去看MySQL Utilities 工具包,最新的是2017年的1.6.5版本.到目录没有更新,所以基本可以推断,MySQL Utilities至少目前不支持mysql-8.0.30. 除非可以更改MySQL Utilities代码!
  2. 由于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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论