您的位置:首页 > 数据库 > MySQL

mysql在线迁移详细步骤 主从复制

2018-02-04 00:27 686 查看
在服务器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库上创建一个复制用户。

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


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

3306库



3307库



发现一样,修改server_id:

在3307上执行:

set global server_id= 102;



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

vi /u01/my3307/my.cnf 



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

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

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

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



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

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



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

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

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

create database test default character set utf8 ;



step 6 直接在3307上恢复

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

select database();

选中需要恢复到的目标库

use test

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

mysql> source /tmp/test.sql





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



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;

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

启动slave在3307上复制

start slave ;



查看slave的状态:

show slave status\G;



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

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

 insert into t1 values(2);



在3307上查询数据是否过来



验证数据已经过来了!

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%";



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

step 10 在确认从库3307完全应用完主库的所有日志以后,就可以切换主从。即把应用切换到3307,3306作为备库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 主从复制