ProxySQL整合MGR提供高可用,是我们知数堂课程中提供一个MySQL高可用的解决方案,架构如下:
mysql> select * from performance_schema.replication_group_members where \
performance_schema.replication_group_members.member_host=@@hostname;
MySQL早期两个字段字符集不一致,可能会导致全表扫描 (性能万恶之源) 在8.0.23中两个字段字符集不一致,目前看是直接报错(这个给赞)
原因分析:
SELECT table_schema, table_name, column_name, character_set_name, \
collation_name FROM information_schema.columns WHERE COLLATION_NAME \
='ascii_general_ci' and table_schema='performance_schema' and table_name like "%group%";
CREATE TABLE `replication_group_members` (
`CHANNEL_NAME` char(64) NOT NULL,
`MEMBER_ID` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`MEMBER_HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL,
`MEMBER_PORT` int DEFAULT NULL,
`MEMBER_STATE` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`MEMBER_ROLE` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`MEMBER_VERSION` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
mysql> select charset(MEMBER_HOST), MEMBER_HOST,charset(@@hostname), \
@@hostname from performance_schema.replication_group_members;
把@@hostname做字符转换
select * from performance_schema.replication_group_members where \
performance_schema.replication_group_members.member_id=convert(@@server_uuid using ascii);
使用utf8的字段做对比 最终的修复办法如下:
select * from performance_schema.replication_group_members where \
performance_schema.replication_group_members.member_id=@@server_uuid;
SELECT table_schema, table_name, column_name, character_set_name, \
collation_name FROM information_schema.columns WHERE COLLATION_NAME \
='ascii_general_ci';
文章转载自MySQLBeginner,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。