正常来讲复制仅在连续的主要MySQL版本之间支持,并且仅从较低版本主机到较高版本从机支持。比如5.7 master - > 8.0 slave。
但是相反则不受支持,比如8.0 master - > 5.7 slave。这里我测试如何将8.0 master 同步到5.7 slave 。
环境架构:
Master (10.139.17.101) | Slave (10.142.33.220) |
mysql> select @@version; +-----------+ | @@version | +-----------+ | 8.0.11 | +-----------+ 1 row in set (0.00 sec) | mysql> select @@version; +---------------+ | @@version | +---------------+ | 5.7.19-17-log | +---------------+ 1 row in set (0.00 sec) |
如果不做任何初始化,去建立主从复制将会无法同步,出现如下错误:
1、MySQL 8.0上的默认character_set 和collation规则变化。
2、MySQL 8.0用户验证方式将默认的Authentication Plugin更改为maching_sha2_password,MySQL 5.7不支持。如果尝试使用caching_sha2_password 插件执行CHANGE MASTER命令 ,将收到以下错误消息:
Last_IO_Errno: 2059
Last_IO_Error: error connecting to master 'root@10.149.17.101:8888' - retry-time: 60 retries: 1
Mysql 8.0操作:
修改mysql 8.0 master character-set-server和collation-server为utf8:
[root@mgr1 ~]# vi data/mydata/my8888/my8888.cnf
character_set_server = utf8
collation-server = utf8_unicode_ci
重启动数据库。在重新启动之后,您必须使用mysql_native_password创建复制用户 。
使用mysql_native_password创建用户 :
mysql> CREATE USER 'repadm'@'10.%' IDENTIFIED WITH mysql_native_password BY 'go20mysqlrep!';
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repadm'@'10.%';
Mysql 5.7操作,建立复制slave:
mysql> CHANGE MASTER TO MASTER_HOST='10.139.17.101',
-> MASTER_USER='repadm',
-> MASTER_PASSWORD='go20mysqlrep!',
-> MASTER_PORT=8888,
-> MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.139.17.101
Master_User: repadm
Master_Port: 8888
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 501
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 706
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 501
Relay_Log_Space: 899
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 171018888
Master_UUID: 003681fb-8a5e-11e8-b3c3-6c0b8482fd32
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 003681fb-8a5e-11e8-b3c3-6c0b8482fd32:1
Executed_Gtid_Set: 003681fb-8a5e-11e8-b3c3-6c0b8482fd32:1
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
注意:任何试图使用MySQL 8中的新功能(如角色,不可见索引或 caching_sha2_password)的尝试 都会使复制停止并出现错误。