mysql单机在线迁移_mysql在线迁移&主从同步详细步骤

本文详细介绍了MySQL单机在线迁移的步骤,包括创建复制用户、设置不同server_id、逻辑备份与恢复、主从复制配置等。通过这些步骤,可以实现数据库的平滑迁移,并确保数据的一致性。
摘要由CSDN通过智能技术生成

整体流程逻辑如下:

在服务器A上创建一个复制账号;

服务器A和服务器B上分别设置不同的server_id;

服务器A执行一次完整的逻辑备份;

从服务器A拷贝备份到服务器B;

服务器B上执行一次全量恢复;

服务器B上执行change master设置主从复制;

服务器B上执行start slave启动复制;

服务器A上设为read only;

服务器B设为主库(服务器B把服务器A转过来的binlog消化完);

step 1. 在3306库上创建一个复制用户

此处示例用户和密码分别为repl和repl4Slave。

grant replication slave,replication client on . to repl@'%' identified by 'repl4Slave' ;

1

grantreplicationslave,replicationclienton.torepl@'%'identifiedby'repl4Slave';

ffa5fa5bdd370036c4331e872834f2c3.png

step 2. 修改3306库和3307库上的server_id,确保不一样

3306库

5e724fc834a434c7af283d7a5fa731c1.png

3307库

c3e0d564abd9e660110d34a69dc03960.png

发现一样,修改server_id:

在3307上执行:

set global server_id= 102;

1

setglobalserver_id=102;

2bdf6f4ed912012119934b1eab37b354.png

修改3307库的配置文件,把server_id改成102

vi /u01/my3307/my.cnf

c406c3f376048f5c891b7b9d260479eb.png

step 3. 在3306库上做一个逻辑全备

mysqldump --single-transaction --master-data=2 -uroot test > /tmp/test.sql

1

mysqldump--single-transaction--master-data=2-uroottest>/tmp/test.sql

–single-transaction数据量大的时候不锁表

–master-data=2 记录备份的时候日志文件和日志位置,如下:

978b23072a984ed97aa7846349372916.png

如果dump出来的文件/tmp/test.sql文件过大,可以直接grep搜索

grep -i " CHANGE MASTER TO" /tmp/test.sql

1

grep-i" CHANGE MASTER TO"/tmp/test.sql

step 4. 把dump出来的3306的dump文件拷贝到3307

自行scp传送即可。

step 5. 在3307库上新建跟3306dump出来的文件一样的数据库

我在3306上dump的是test库的数据,所以在3307上新建一个一样的数据库

create database test default character set utf8 ;

1

createdatabasetestdefaultcharactersetutf8;

090b41e158d1aa347bd065245cd2f398.png

step 6. 直接在3307上恢复

查看当前选中的是哪个数据库

select database();

1

selectdatabase();

选中需要恢复到的目标库

use test

1

usetest

应用dump出来的文件进行恢复

mysql> source /tmp/test.sql

1

mysql>source/tmp/test.sql

28ba084d12731804c18976b96d1e9556.png

16e0b4b379a8a334961caa440d1b293a.png

再次查看test数据库上是否有t1表以及t1表中数据是否已经有了。

a498045676edce962ef71bbdf288cdab.png

step 7. 设置3307复制库是源库的从数据库

在3307上执行下面的命令:

change master to

master_host='127.0.0.1',

master_port=3306,

master_user='repl',

master_password='repl4Slave',

master_log_file='binlog.000018',

master_log_pos=718;

1

2

3

4

5

6

7

changemasterto

master_host='127.0.0.1',

master_port=3306,

master_user='repl',

master_password='repl4Slave',

master_log_file='binlog.000018',

master_log_pos=718;

这条命令的意思是:设置3306为3307的主库,通过3306源库的repl用户进行复制,开始复制的位置是binlog日志binlog.000018的718位置处(也就是全备后的日志位置)。

启动slave在3307上复制

start slave ;

1

startslave;

c9440a14a3726a857443c519216078fb.png

查看slave的状态:

show slave status\G;

1

showslavestatus\G;

c930e1eeedfeef871c743482ef4b15e3.png

step 8. 确认全备后又插入的数据是否已经复制过来了

在3306的test库上的t1表在插入一条数据

 insert into t1 values(2);

1

 insertintot1values(2);

84d0e7b91a3e3d95a1083abb76032f0e.png

在3307上查询数据是否过来

29ac31b335cf9d6034850e3c900f11ca.png

验证数据已经过来了!

step 9. 在3306源库上把数据库设置成readonly状态

show variables like '%read_only%' ;

flush tables with read lock;

set global read_only=on ;

show global variables like "%read_only%";

1

2

3

4

showvariableslike'%read_only%';

flushtableswithreadlock;

setglobalread_only=on;

showglobalvariableslike"%read_only%";

68405793ddaa790538d9f038a4e1257d.png

这样设置以后主库3306下所有的用户(包括超级用户root),都无法修改该库下的任何数据!

step 10. 切换主从

在确认从库3307完全应用完主库的所有日志以后,就可以切换主从。即把应用切换到3307,3306作为备库。

原文链接:https://blog.csdn.net/kadwf123/java/article/details/79250499

喜欢 (0)or分享 (0)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值