迁移一套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集群迁移数据到另一套集群)

ES 7.6.2集群迁移(从一套ES集群迁移数据到另一套集群)

Maxscale 功能简单介绍

maxscale + mariadb5.5读写分离

maxscale如何实现某块儿业务读写都在主库进行

maxscale如何实现某块儿业务读写都在主库进行