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作为备库。
服务器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作为备库。
相关文章推荐
- mysql5.6版本-主从复制配置详细步骤
- linux系统下实现mysql热备份详细步骤(mysql主从复制)
- linux系统下实现mysql热备份详细步骤(mysql主从复制)
- linux系统下实现mysql热备份详细步骤(mysql主从复制)
- mysql传统主从、双主复制+keepalived配置步骤
- MySQL主从复制、双机热备步骤
- ssdb 主从同步复制配置详细步骤
- MySQL与MariaDB的主从数据复制设置步骤
- Mysql主从复制技术详细配置过程
- mysql同步复制搭建方法指南详细步骤
- mysql主从复制的步骤
- Linux下MySQL主从同步复制详细配置
- MySQL 主从复制详解(详细)
- MySQL主从复制的原理及配置方法(比较详细)
- MySQL 主从复制 详细讲解(一)
- mysql 主从复制实现步骤
- mysql5.6 主从复制,详细配置
- MySQL主从复制的原理及配置方法(比较详细)
- MySQL主从复制原理、半同步操作步骤及原理
- [Mysql] 主从复制环境搭建步骤详解