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

构建MySQL8.0到MySQL5.7主从复制

IT那活儿 2021-10-27
3119

简介

如何构建MySQL8.0到MySQL5.7主从复制,在实际异构环境中使用此架构会有所帮助。例如,在MySQL升级情况下,使用新版本MySQL作为master对回滚很方便。从官方文档介绍,只支持连续的MySQL版本之间进行复制,并且由低版本的master到高版本的slave,以下为支持场景示例:

5.7 主 –> 8.0 从

不支持反向复制:

8.0 主 –> 5.7 从

环境

1. 通过参数设置使用能够支持从高版本到低版本主从复制。

如果使用 MySQL 8 的新功能,将会错误信息导致主从复制停止。

以下为构建主从复制的初始环境:

slave > select @@version;+---------------+| @@version     |+---------------+| 5.7.17-log |+---------------+1 row in set (0.00 sec)master > select @@version;+-----------+| @@version |+-----------+| 8.0.12    |+-----------+1 row in set (0.00 sec)

2. 在执行CHANGE MASTER命令之前,需要修改主服务器上的排序规则。

否则复制将遇到此错误:

slave > show slave status\G                   Last_Errno: 22                   Last_Error: Error 'Character set '#255' is not a compiled character set and is not specified in the '/data/percona_server/5.7.17/share/charsets/Index.xml' file' on query. Default database: 'mysql8_1'. Query: 'create database mysql8_1'

这是因为 MySQL 8 上的默认 character_set 和排序规则已更改。根据官方文档介绍:

character_set_server 和 character_set_database 系统变量默认值已从latin1更改为utf8mb4。

collation_server的和collation_database系统变量默认值已从 latin1_swedish_ci 到utf8mb4_0900_ai_ci。

3. 将MySQL 8 上的排序规则和字符集更改为utf8:
# master my.cnf[client]default-character-set=utf8[mysqld]character-set-server=utf8collation-server=utf8_unicode_ci

4. 创建复制用户

重新启动MySQL 8使参数生效。重启以后,使用mysql_native_password密码策略创建复制用户 ,因为 MySQL 8默认用户认证策略为caching_sha2_password。如果使用caching_sha2_password 创建用户并执行 CHANGE MASTER 命令 ,将会出现以下错误消息:

Last_IO_Errno: 2059Last_IO_Error: error connecting to master 'root@127.0.0.1:19025' - retry-time: 60 retries: 1

5. 使用mysql_native_password密码策略创建用户 :

master> CREATE USER 'replica_user'@'%' IDENTIFIED WITH mysql_native_password BY 'repli$cat';master> GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';

6. 构建主从复制

master > show master status\G*************************** 1. row ***************************File: mysql-bin.000007Position: 155Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:1 row in set (0.00 sec)slave > CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='replica_user', MASTER_PASSWORD='repli$cat',MASTER_PORT=19025, MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=155; start slave;Query OK, 0 rows affected, 2 warnings (0.01 sec)Query OK, 0 rows affected (0.00 sec)# This procedure works with GTIDs tooslave > CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='replica_user', MASTER_PASSWORD='repli$cat',MASTER_PORT=19025,MASTER_AUTO_POSITION = 1 ; start slave;

7. 检查主从状态:

master > show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 127.0.0.1Master_User: replica_userMaster_Port: 19025Connect_Retry: 60Master_Log_File: mysql-bin.000007Read_Master_Log_Pos: 155Relay_Log_File: mysql-relay.000002Relay_Log_Pos: 321Relay_Master_Log_File: mysql-bin.000007Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 155Relay_Log_Space: 524Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 100Master_UUID: 00019025-1111-1111-1111-111111111111Master_Info_File: home/vinicius.grippa/sandboxes/rsandbox_5_7_17/master/data/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:1 row in set (0.01 sec)

8.验证主从复制是否正常运行

master > create database vinnie;Query OK, 1 row affected (0.06 sec)slave > show databases like 'vinnie';+-------------------+| Database (vinnie) |+-------------------+| vinnie |+-------------------+1 row in set (0.00 sec)

总结

通过调整参数能够使MySQL 8复制到MySQL 5.7,在某些特殊的情况下(尤其是升级),可以方便使用,但在实际环境中不建议使用该架构,因为在某些情况下它容易出错和不兼容。

END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论