实现 MySQL 5.7 在线增加新的从节点
环境准备
- 数据库版本: MySQL 5.7.35
- 备份工具版本: Xtrabackup 2.4.24
对主数据库进行备份
首先,我们使用 xtrabackup 工具对主库进行全备份,并将备份文件存储在挂载的共享存储目录 /mnt
中。
xtrabackup --user=xxx --host=127.0.0.1 --password=xxx --backup --target-dir=/mnt/db01_fullbackup_0408
恢复数据库至新的从节点
在新的从节点上,我们首先创建 MySQL 数据目录,并将备份文件从共享存储目录拷贝至本地,然后使用xtrabackup将备份文件恢复至从库。
mkdir -p /data/mysql/{data,log,undolog}
chown -R mysql:mysql /data/
xtrabackup --prepare --target-dir=/mnt/db01_fullbackup_0408
xtrabackup --copy-back --target-dir=/mnt/db01_fullbackup_0408
启动 MySQL 从节点
完成数据恢复后,启动新的从节点 MySQL 服务。
systemctl start mysqld
查看 GTID 信息
在恢复完成后,我们可以通过查看备份文件夹中的 xtrabackup_binlog_info
文件来获取 GTID 信息。
mysql-bin.000359 460509496 04617ee8-73a1-11ec-bf3e-fa163e7834a4:1-245021226, dc3a9a5d-739f-11ec-a5d3-fa163e5e01bc:1-95778220
建立主从同步关系
在新的从节点上,配置主从同步关系,并启动从节点的复制任务。
root@mysqldb 15:58: [mysql]> reset master ;
root@mysqldb 15:58: [mysql]> reset slave all ;
root@mysqldb 15:58: [mysql]> SET GLOBAL GTID_PURGED='04617ee8-73a1-11ec-bf3e-fa163e7834a4:1-245021226,dc3a9a5d-739f-11ec-a5d3-fa163e5e01bc:1-95778220';
root@mysqldb 15:58: [mysql]> CHANGE MASTER TO MASTER_HOST='db01', MASTER_USER=xxx, MASTER_PASSWORD=xxx, MASTER_AUTO_POSITION=1;
root@mysqldb 15:58: [(none)]> START SLAVE;
root@mysqldb 15:59: [(none)]> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: db01
Master_User: xxx
Master_Port: xxx
Connect_Retry: 60
Master_Log_File: mysql-bin.000359
Read_Master_Log_Pos: 739107631
Relay_Log_File: db03-relay-bin.000002
Relay_Log_Pos: 10621194
Relay_Master_Log_File: mysql-bin.000359
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: 471130284
Relay_Log_Space: 278598756
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: 8250
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: 3306015156
Master_UUID: dc3a9a5d-739f-11ec-a5d3-fa163e5e01bc
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Waiting for dependent transaction to commit
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: dc3a9a5d-739f-11ec-a5d3-fa163e5e01bc:95778221-96021113
Executed_Gtid_Set: 04617ee8-73a1-11ec-bf3e-fa163e7834a4:1-245021226,
dc3a9a5d-739f-11ec-a5d3-fa163e5e01bc:1-95787405
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
等待从库同步完成,然后设置从库为只读
最后,我们将新的从库设为只读,以确保数据的一致性,并重启 MySQL 服务使配置生效。
编辑 MySQL 配置文件 my.cnf
,将 super_read_only
参数设置为 on
。