MySQL进阶运维与架构从主从复制到链式复制
31.4 切换主从复制到链式复制
MySQL中的链式复制模式是指多个MySQL数据库实例之间呈现链状结构,即A数据库是B数据库的主库,B数据库又是C数据库的主库,此时,B数据库又叫作中继从库。
31.4.1 服务器规划
将MySQL主从复制模式切换到链式复制模式后的服务器规划如表31-4所示。
表31-4 MySQL链式复制模式的服务器规划
链式复制模式示意图如图31-4所示。
图31-4 链式复制模式示意图
31.4.2 切换复制模式
(1)在binghe153服务器上停止MySQL从库的运行,并查看Relay_Master_Log_File和Exec_Master_Log_Pos的值。
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.175.151
Master_User: binghe153
Master_Port: 3306
Relay_Master_Log_File: mysql-bin.000007
Exec_Master_Log_Pos: 6299
#################省略部分输出结果########################
结果显示,在binghe153服务器上的Relay_Master_Log_File为mysql-bin.000007,Exec_Master_Log_Pos的值为6299。
(2)在binghe152服务器上停止MySQL从库的运行,并查看Relay_Master_Log_File和Exec_Master_Log_Pos的值。
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.175.151
Master_User: binghe152
Master_Port: 3306
Relay_Master_Log_File: mysql-bin.000007
Exec_Master_Log_Pos: 6638
结果显示,binghe152服务器上的Relay_Master_Log_File为mysql-bin.000007,Exec_Master_Log_Pos的值为6638。由此说明binghe152服务器上的MySQL数据库的数据与binghe153服务器上的MySQL数据库中的数据不一致。也就是说,在停止binghe153服务器上的MySQL从库后,binghe152服务器上的MySQL从库又同步了MySQL主库的数据。此时,需要将两个从库的数据进行同步。
注意:如果两个从库的Relay_Master_Log_File和Exec_Master_Log_Pos的值均相同,则说明两个从库中的数据是同步的,不需要进行从库的数据同步操作,可以省略下面的第(3)步和第(4)步。
(3)在binghe153服务器上,同步binghe152服务器上的MySQL数据。
mysql> START SLAVE UNTIL MASTER_LOG_FILE='mysql-bin.000007',
-> Master_Log_Pos=6638;
Query OK, 0 rows affected, 1 warning (0.00 sec)
其中,参数Master_Log_Pos的值与binghe152服务器上的Exec_Master_Log_Pos的值相同。
(4)再次查看binghe153服务器上的从数据库运行状态。
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.175.151
Master_User: binghe153
Master_Port: 3306
Relay_Master_Log_File: mysql-bin.000007
Exec_Master_Log_Pos: 6638
Until_Log_Pos: 6638
Seconds_Behind_Master: NULL
##################省略部分输出结果信息#####################
binghe153服务器上的Relay_Master_Log_File的值为mysql-bin.000007,Exec_Master_Log_Pos的值为6638,Until_Log_Pos的值为6638,Seconds_Behind_Master的值为NULL,说明binghe153服务器上的MySQL数据已经和binghe152服务器上的MySQL数据同步。
(5)在binghe152服务器上创建从数据库同步的账户信息。
mysql> CREATE USER 'binghe153'@'192.168.175.153' IDENTIFIED BY 'binghe153';
Query OK, 0 rows affected (0.11 sec)
mysql> ALTER USER 'binghe153'@'192.168.175.153' IDENTIFIED WITH mysql_native_password BY 'binghe153';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'binghe153'@'192.168.175.153';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
(6)在binghe152服务器上,查看主库的状态。
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 6578 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
结果显示,当前的二进制日志文件为mysql-bin.000008,位置坐标为6578。
(7)启动binghe152服务器上的从数据库,并确保从数据库的运行状态正常。
mysql> START SLAVE;
Query OK, 0 rows affected (0.04 sec)
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.175.151
Master_User: binghe152
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 6638
Relay_Log_File: relay-bin.000006
Relay_Log_Pos: 322
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(8)在binghe153服务器上,停止从数据库的运行,并将其主数据库指向binghe152服务器上的数据库。
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.13 sec)
mysql> CHANGE MASTER TO MASTER_HOST='192.168.175.152',
-> MASTER_PORT=3306,
-> MASTER_USER='binghe153',
-> MASTER_PASSWORD='binghe153',
-> MASTER_LOG_FILE='mysql-bin.000008',
-> MASTER_LOG_POS=6578;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
(9)在binghe153服务器上,启动从库的运行,并验证从库的运行状态。
mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.175.152
Master_User: binghe153
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000008
Read_Master_Log_Pos: 6578
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 322
Relay_Master_Log_File: mysql-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
由输出结果可知,binghe153服务器上的MySQL从库的运行状态正常。
此时,binghe153服务器上的MySQL的主库为binghe152服务器上的MySQL数据库,说明MySQL的复制模式已经成功从主从模式切换为链式模式。
说明:链式复制模式的测试方式与31.3.3节中的测试方式相同,不再赘述。
- 点赞
- 收藏
- 关注作者
评论(0)