迁移一套mariadb+maxscale到另外一套mariadb+maxscale上
Posted 雅冰石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迁移一套mariadb+maxscale到另外一套mariadb+maxscale上相关的知识,希望对你有一定的参考价值。
一 实验目的
在不影响业务的情况下,将一套现有的mariadb数据迁移到另外一套新mariadb环境。
二 实验环境
源端mariadb+maxscale架构:
角色 | ip | 备注 |
Mariadb 1 | 192.168.144.251 | 主库,server_id为1 |
Mariadb 2 | 192.168.144.252 | 从库,server_id为2 |
maxscale | 192.168.144.251 | 代理了上述两套mariadb |
目标端mariadb+maxscale架构:
角色 | ip | 备注 |
Mariadb 1 | 192.168.144.253 | 主库,server_id为1 |
Mariadb 2 | 192.168.144.247 | 从库,server_id为2 |
maxscale | 192.168.144.253 | 代理了上述两套mariadb |
三 实验步骤
思路:
先将目标端的mariadb主库临时成为源端主库的从库,进行主从复制,从而保证数据同步,避免影响业务,然后切程序里连的数据库代理ip。
3.1 修改目标端主库的server_id
#由于源端和目标端的server_id冲突,因此这里需要改下目标端主库的server_id,否则在执行下面3.2.2步骤时,会报错。
#登录目标端主库数据库,执行:
set global server_id=4;
3.2 将源端数据迁移到目标端,并将目标端的主库变为源端主库的从库
3.2.1 备份恢复数据
#在目标端主库服务器(192.168.144.253)上远程源端主库(192.168.144.251)进行备份:
mysqldump -h 192.168.144.251 -P 4417 -u root -p --single-transaction --gtid --master-data=1 --all-databases > /opt/master_all.bak_20210914
#在目标端主库服务器(192.168.144.253)上恢复数据
mysql -u root -p < /opt/master_all.bak_20210914
3.2.2 将目标端主库指向源端主库进行复制
登录目标端主库数据库执行:
#指向源端主库进行主从复制
change master to MASTER_HOST="192.168.144.251", MASTER_PORT=4417, MASTER_USER="ReplUser", MASTER_PASSWORD="密码", MASTER_USE_GTID=slave_pos;
#开启从库复制
start slave;
#检查主从状态
show slave status \\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.144.251
Master_User: ReplUser
Master_Port: 4417
Connect_Retry: 60
Master_Log_File: master-bin.000003
Read_Master_Log_Pos: 1979757
Relay_Log_File: Centos7-Mode-V8-relay-bin.000002
Relay_Log_Pos: 1951289
Relay_Master_Log_File: master-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
要确保SQL进程和IO进程状态为Yes。
3.3 切应用连的数据库代理ip
3.3.1 关闭源端数据库
#关闭源端maxscale
systemctl stop maxscale
#关源端mariadb从库
systemctl stop mariadb
#关源端mariadb主库
3.3.2 确保目标端主库的主从复制无延迟
登录目标端主库数据库执行:
show slave status \\G;
需要检查以下几项内容:
- 需要确保Slave_IO_Running和Slave_SQL_Running值都为Yes,如果是No,请检查Last_Error处的报错,进行相应处理。
- 需要确保Relay_Master_Log_File的值是否和Master_Log_File的值一致
- 需要确保Exec_Master_Log_Pos和Read_Master_Log_Pos值一致
- 需要确保Seconds_Behind_Master值为0.
3.3.3 将程序里指定的ip改为连接目标端maxscale的代理ip
略
3.4 断开目标端数据库与源端数据库的主从复制
登录目标端主库数据库执行:
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.077 sec)
MariaDB [(none)]> reset slave all;
Query OK, 0 rows affected (0.001 sec)
3.5 还原目标端主库的server_id
#目标端主库
set global server_id=1;
3.6 检查目标端主从复制
在目标端maxscale服务器上执行:maxctrl --hosts=127.0.0.1:8989 list servers
需要确保主库的State为Master,Running,从库的State状态为Slave,Running。
以上是关于迁移一套mariadb+maxscale到另外一套mariadb+maxscale上的主要内容,如果未能解决你的问题,请参考以下文章
ES 7.6.2集群迁移(从一套ES集群迁移数据到另一套集群)