12.MySQL的主从复制
[toc]
主从复制简介
案例
2015年5月28日11时,12小时
后恢复,损失:平均每小时106.48W$
规避风险的方案
- 高可用
- 辅助备份
- 分担负载
功能简介
复制是 MySQL 的一项功能,允许服务器将一个实例的更改复制到另一个实例。
- 主服务器将所有数据和结构更改记录到二进制日志中。
- 从属服务器从主服务器请求该二进制日志并在本地应用其内容。
- IO:请求主库,获取上一次执行过的新的事件,并存放到relaylog
- SQL:从relaylog中将sql语句翻译给从库执行

主从复制原理
主从复制的前提
- 两台或两台以上的数据库实例
- 主库要开启二进制日志
- 主库要有复制用户
- 主库的server_id和从库不同
- 从库需要在开启复制功能前,要获取到主库之前的数据(主库备份,并且记录binlog当时位置)
- 从库在第一次开启主从复制时,时必须获知主库:ip,port,user,password,logfile,pos
- IP:10.0.0.51
- Port:3306
- User:rep
- Password:Help9090
- logFile:mysql-bin.000002
- Pos:120
- 从库要开启相关线程:IO、SQL
- 从库需要记录复制相关用户信息,还应该记录到上次已经从主库请求到哪个二进制日志
- 从库请求过来的binlog,首先要存下来,并且执行binlog,执行过的信息保存下来
主从复制的原理结构
主从复制涉及3线程4文件
- 从库:
- IO线程
- SQL线程
- master.info
- relay-log.info
- db03-relay-bin.000004
- 主库:
- dump线程
- mysql-bin.000001
- 总结:
- binlog:仅主库开启
- 主从复制用户:仅主库要创建
- server_id:主库和从库都需要设置,不能相同,即标识符作用
- 注意:
- 做主从复制之前,一定要保证两台数据库的数据是一致的
主从复制涉及到的文件和线程
- 主库:
- 主库binlog:记录主库发生过的修改事件
- dump thread:给从库传送(TP)二进制日志线程
- 从库:
- relay-log(中继日志):存储所有主库TP过来的binlog事件
- master.info:存储复制用户信息,上次请求到的主库binlog位置点
- IO thread:接收主库发来的binlog日志,也是从库请求主库的线程
- SQL thread:执行主库TP过来的日志
- 原理
- 通过change master to语句告诉从库主库的ip,port,user,password,file,pos
- 从库通过start slave命令开启复制必要的IO线程和SQL线程
- 从库通过IO线程拿着change master to用户密码相关信息,连接主库,验证合法性
- 从库连接成功后,会根据binlog的pos问主库,有没有比这个新的数据
- 主库接收到从库请求后,比较一下binlog信息,如果有就将最新数据通过dump线程给从库IO线程
- 从库通过IO线程接收到主库发来的binlog事件,存储到TCP/IP缓存中,并返回ACK更新master.info位置点
- 将TCP/IP缓存中的内容存到relay-log中
- SQL线程读取relay-log.info,读取到上次已经执行过的relay-log位置点,继续执行后续的relay-log日志,执行完成后,更新relay-log.info
搭建主从
新环境搭建主从
主库操作
修改配置文件
1
2
3
4
5# 编辑mysql配置文件
vim /etc/my.cnf
[mysqld] # 在mysqld标签下配置
server_id=1 # 标识符,主库和从库server-id不相同即可
log_bin=mysql-bin # 开启binlog日志创建主从复制用户
1
2
3
4
5
6
7
8# 登录数据库
mysql -uroot -pHelp9090
#创建rep用户
mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by 'Help9090';
# 记录主库binlog及位置点
mysql> show master status;
从库操作
修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# 修改db02配置文件
vim /etc/my.cnf
[mysqld] # 在mysqld标签下配置
server_id =5 # 标识符,主库和从库server-id不相同即可
# 重启mysql
/etc/init.d/mysqld restart
# 登陆数据库
mysql -uroot -pHelp9090
# 执行change master to 语句
mysql> change master to
master_host='172.16.1.51',
master_user='rep',
master_password='Help9090',
master_log_file='mysql-bin.000001',
master_log_pos=125337;
# 开启主从复制
mysql> start slave;
# 查看从库状态
mysql> show slave status\G
生产环境搭建主从
主库操作
修改配置文件
1
2
3
4
5
6
7
8# 编辑mysql配置文件
vim /etc/my.cnf
[mysqld]
# 在mysqld标签下配置
server_id=1
# 标识符,主库和从库server-id不相同即可
log_bin=mysql-bin
# 开启binlog日志创建主从复制用户
1
2
3
4
5
6
7
8
9
10
11# 1.登录数据库
mysql -uroot -pHelp9090
# 2.创建rep用户
mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by 'Help9090';
# 3.做打点全备
mysqldump -uroot -pHelp9090 -A -R --triggers --master-data=1 --single-transaction > /tmp/master.sql
# 4.发送到从库
scp /tmp/master.sql 172.16.1.51:/tmp/
从库操作
修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31# 1.修改配置文件
vim /etc/my.cnf
[mysqld]
# 在mysqld标签下配置
basedir=/app/mysql
datadir=/app/mysql/data
server_id =2
# 标识符,主库和从库server-id不相同即可
skip-name-resolve
log_bin=mysql-bin
# 2.重启mysql
/etc/init.d/mysqld restart
# 3.恢复全备数据
mysql -uroot -pHelp9090 < /tmp/master.sql
# 4.登陆数据库
mysql -uroot -pHelp9090
# 5.执行change master to 语句
mysql> change master to
master_host='10.0.0.54',
master_user='rep',
master_password='Help9090';
# 6.开启主从复制
mysql> start slave;
# 7.查看从库状态
mysql> show slave status\G
MySQL主从复制基本故障
从库IO线程故障
- IP不通
- ping
- 端口不通
- telnet
- 用户名密码问题
- 在从库上尝试连接主从复制用户:mysql -urep -pHelp0909 -h10.0.0.54
- server_id
- 检查是否相同
- uuid
- 检查是否相同
- binlog
- 检查是否正确
- IP不通
从库SQL线程故障
主库和从库数据不一致
方案一(有风险)
1
2
3
4
5
6
7
8# 临时停止同步
mysql> stop slave;
# 将同步指针向下移动一个(可重复操作)
mysql> set global sql_slave_skip_counter=1;
# 开启同步
mysql> start slave;方案二(有风险)
1
2
3
4
5# 编辑配置文件
[root@db01 ~]# vim /etc/my.cnf
# 在[mysqld]标签下添加以下参数
slave-skip-errors=1032,1062,1007方案三(推荐)
1
# 重新备份数据库,恢复到从库
规避风险
1
2
3
4
5
6
7
8
9
10# 给从库设置为只读
# 在命令行临时设置
set global read_only=1;
# 在配置文件中永久生效
read_only=1
# 1.保证两个数据库的数据完全一致
# 2.从库无法写入数据
延时从库
延时从库的概述
普通的主从复制可能存在不足
- 逻辑损坏怎么办?
- 不能保证主库的操作,从库一定能做
- 高可用?自动failover?
- 过滤复制
PS:企业中一般会延时3-6小时
延时从库的原理
延时从库的优缺点
- 优点:
- 可以备份,恢复数据
- 安全性高
- 缺点:
- 延时从库不能对外提供服务
- 浪费资源
配置延时从库
延时从库配置方法
没有做过主从复制的从库
部署延时从库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# 停止主从复制
mysql>stop slave;
# 查看主库的binlog名字和位置点
mysql> show master status;
+------------------+----------+
| File | Position |
+------------------+----------+
| mysql-bin.000002 | 310 |
+------------------+----------+
# 配置从库中主库的信息并设置延时时间
change master to
master_user='rep',
master_password='123@qqdianCOM',
master_host='172.16.1.51',
master_log_file='mysql-bin.000002',
master_log_pos=310,
master_delay=180;
# 开启主从复制
mysql> start slave;
# 查看状态
mysql> show slave status \G
SQL_Delay: 180取消从库身份的两种方式
1
2
3
4
5# 重置从库所有主库信息,重新开始配置
mysql> reset slave all;
# 重置从库主库信息,更新配置
mysql> reset slave;
做过主从复制的从库
部署延时从库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 停止主从复制
mysql> stop slave;
# 重置从库主库信息,更新配置
mysql> reset slave;
# 更新从库中主库的信息
mysql> change master to master_delay=180;
# 开启主从复制
mysql> start slave;
# 查看状态
mysql> show slave status \G
SQL_Delay: 180取消延时从库身份
1
2
3
4
5
6
7
8# 停止主从复制
mysql> stop slave;
# 修改延时时间为0
mysql> change master to master_delay=0;
# # 开启主从复制
mysql> start slave;
利用延时从库恢复数据案例
故障环境
总数据量级500G,正常备份去恢复需要1.5-2小时
配置延时3600秒
1
mysql>CHANGE MASTER TO MASTER_DELAY = 3600;
主库
1
drop database db;
怎么利用延时从库,恢复数据?
模拟环境
搭建主从库并配置延时从库
主库
1
2
3
4
5
6
7
8
9
10
11# 1.登录数据库
mysql -uroot -pHelp9090
# 2.创建rep用户
mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by 'Help9090';
# 3.做打点全备
mysqldump -uroot -pHelp9090 -A -R --triggers --master-data=1 --single-transaction > /tmp/master.sql
# 4.发送到从库
scp /tmp/master.sql 172.16.1.52:/tmp/从库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30# 1.修改配置文件
vim /etc/my.cnf
[mysqld] # 在mysqld标签下配置
basedir=/app/mysql
datadir=/app/mysql/data
server_id =2 # 标识符,主库和从库server-id不相同即可
skip-name-resolve
log_bin=mysql-bin
# 2.重启mysql
/etc/init.d/mysqld restart
# 3.恢复全备数据
mysql -uroot -pHelp9090 < /tmp/master.sql
# 4.登陆数据库
mysql -uroot -pHelp9090
# 5.执行change master to 语句
mysql> change master to
master_host='172.16.1.51',
master_user='rep',
master_password='Help9090',
master_delay=300;
# 6.开启主从复制
mysql> start slave;
# 7.查看从库状态
mysql> show slave status\G
模拟数据
主库创建库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 创建db库
create database db;
# 执行脚本模拟写入数据
vim a.sh
#!/bin/bash
mysql -uroot -pHelp9090 -e 'drop database db;'
mysql -uroot -pHelp9090 -e 'create database if not exists db;'
mysql -uroot -pHelp9090 -e 'use db;create table if not exists db1(id int);'
num=0
while true;do
((num ++))
mysql -uroot -pHelp9090 -e "insert into db.db1
values($num);commit;"
sleep 1
done模拟误删除数据
1
drop database db;
恢复数据
从库操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47# 停止SQL线程
mysql> stop slave sql_thread;
# 准备新环境
# 停止连接数据库的所有程序
systemctl stop tomcat
systemctl stop nginx
systemctl stop php-fpm
# 给延时从库做一次全备
[root@db03 data]# mysqldump -uroot -p123@qqdianCOM -A -R --triggers|gzip > /tmp/full.sql.gz
# 将全备恢复到新环境(注意:不要关闭二进制日志记录)
[root@db03 data]# scp /tmp/full.sql.gz 172.16.1.51:/tmp
# 查看relay-log.info中SQL线程执行进度
[root@db03 data]# cat relay-log.info
./db03-relay-bin.000002
72130
# 截取relaylog结束位置码
mysqlbinlog --base64-output=decode-rows -vvv db02-relay-bin.000002 |grep drop -C 5
at 564297
# 第一段截取内容
起始位置点:497244
结束位置点:564297
# 截取relaylog起始位置码
mysqlbinlog --base64-output=decode-rows -vvv db02-relay-bin.000002 |grep drop -C 5
at 564383
# 截取relaylog结束位置码
[root@db03 data]# mysqlbinlog --base64-output=decode-rows -vvv
db03-relay-bin.000002|tail
at 992801
# 截取relay-log
[root@db03 data]# mysqlbinlog --start-position=497244 --stopposition=564297 db03-relay-bin.000002 > /tmp/inc1.sql
[root@db03 data]# mysqlbinlog --start-position=564383 --stopposition=992801 db03-relay-bin.000002 > /tmp/inc2.sql
# 将截取的relay-log发送到新环境
[root@db03 data]# scp /tmp/inc1.sql /tmp/inc2.sql 172.16.1.51:/opt
# 延时从库开启sql线程
mysql> start slave sql_thread;新环境操作
1
2
3
4
5
6
7
8# 恢复全备数据
[root@db01 ~]# zcat /tmp/full.sql.gz |mysql -uroot -pHelp9090
# 恢复第一段截取内容
[root@db01 ~]# mysql -uroot -pHelp9090 < /opt/inc1.sql
# 恢复第二段截取内容
[root@db01 ~]# mysql -uroot -pHelp9090 < /opt/inc2.sql
半同步复制
半同步复制的概述
从MySQL5.5开始,支持半自动复制。
之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。
如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。
简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。
半同步复制(Semi synchronous Replication)则一定程度上保证提交的事务已经传给了至少一个备库。
出发点是保证主从数据一致性问题,安全的考虑。
半同步复制的原理
各版本半同步复制功能的介绍
- 5.5 出现概念,但是不建议使用,性能太差
- 5.6出现group commit 组提交功能,来提升开启半同步复制的性能
- 5.7更加完善了,在group commit基础上出现了MGR
- 5.7的增强半同步复制的新特性:after commit; after sync;
配置半同步复制
配置半同步复制
主库配置半同步复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61# 先查看是否动态支持半同步复制
mysql> show global variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
# 查看本地半同步插件
[root@db01 ~]# ll /usr/lib64/mysql/plugin/
-rwxr-xr-x 1 root root 937952 Dec 8 02:37 semisync_master.so
-rwxr-xr-x 1 root root 160888 Dec 8 02:37 semisync_slave.so
# 主库安装半同步插件
mysql> install plugin rpl_semi_sync_master soname'semisync_master.so';
# 启动插件
mysql> set global rpl_semi_sync_master_enabled = 1;
# 设置sql线程执行超时时间
mysql> set global rpl_semi_sync_master_timeout = 1000;
# 永久开启和设置超时时间(不用重启)
vim /etc/my.cnf
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 1000
# 查看配置信息
mysql> show variables like'rpl%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 1000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
| rpl_stop_slave_timeout | 31536000 |
+-------------------------------------------+------------+
# 查看半自动同步执行信息
mysql> show global status like 'rpl_semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+从库配置半同步复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34# 从库安装半同步插件
mysql> install plugin rpl_semi_sync_slave soname'semisync_slave.so';
# 开启插件
mysql> set global rpl_semi_sync_slave_enabled = 1;
# 永久开启插件(不用重启)
vim /etc/my.cnf
rpl_semi_sync_slave_enabled = 1
# 重启IO线程,使其生效
mysql> stop slave io_thread;
mysql> start slave io_thread;
# 查看半自动同步执行信息
mysql> show global status like 'rpl_semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
关闭半同步复制
主库关闭半同步复制
1
2# 关闭半同步(1:开启 0:关闭)
mysql> set global rpl_semi_sync_master_enabled = 0;从库关闭半同步复制
1
2
3
4
5
6# 关闭半同步(1:开启 0:关闭)
mysql> set global rpl_semi_sync_slave_enabled = 0;
# 重启IO线程
mysql> stop slave io_thread;
mysql> start slave io_thread;
PS:
- 在开启半同步复制状态时,查询会有延迟时间,关闭之后则没有
- 相关参数说明
- rpl_semi_sync_master_timeout=milliseconds
设置此参数值(ms),为了防止半同步复制在没有收到确认的情况下发生堵塞,如果Master在超时之前没有收到任何确认,将恢复到正常的异步复制,并继续执行没有半同步的复制操作。 - rpl_semi_sync_master_wait_no_slave={ON|OFF}
如果一个事务被提交,但Master没有任何Slave的连接,这时不可能将事务发送到其它地方保护起来。
默认情况下,Master会在时间限制范围内继续等待Slave的连接,并确认该事务已经被正确的写到磁盘上。
可以使用此参数选项关闭这种行为,在这种情况下,如果没有Slave连接,Master就会恢复到异步复制。
- rpl_semi_sync_master_timeout=milliseconds
过滤复制
过滤复制的概述及原理
- 主库:
- 白名单:只记录白名单中列出的库的二进制日志
- binlog-do-db
- 黑名单:不记录黑名单列出的库的二进制日志
- binlog-ignore-db
- 白名单:只记录白名单中列出的库的二进制日志
- 从库:
- 白名单:只执行白名单中列出的库或者表的中继日志
- –replicate-do-db=test
- –replicate-do-table=test.t1
- –replicate-wild-do-table=test.t2
- 黑名单:不执行黑名单中列出的库或者表的中继日志
- –replicate-ignore-db
- –replicate-ignore-table
- –replicate-wild-ignore-table
- 白名单:只执行白名单中列出的库或者表的中继日志
复制过滤配置
主库:在binlog做的操作
黑名单
binlog-ignore-db
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 主库设置黑名单
vim /etc/my.cnf
[mysqld]
binlog-ignore-db=mysql
binlog-ignore-db=wzry
# 重启MySQL
[root@db01 ~]# systemctl restart mysqld
黑名单指定的数据库中执行的sql语句都不记录到binlog中,其他库正常记录
# 查看binlog状态
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 | 154 | | mysql,wzry |
+------------------+----------+--------------+------------------+
白名单
binlog-do-db
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 主库设置白名单
vim /etc/my.cnf
[mysqld]
binlog-do-db=lol
binlog-do-db=dnf
# 重启MySQL
[root@db01 ~]# systemctl restart mysqld
白名单只记录指定库的binlog,其他库一律不记录
# 查看binlog状态
mysql> show master status;
+------------------+----------+--------------+
| File | Position | Binlog_Do_DB |
+------------------+----------+--------------+
| mysql-bin.000006 | 154 | lol,dnf |
+------------------+----------+--------------+
从库:在relay-log做的操作,IO线程正常接收数据,SQL线程处判断是否执行
黑名单
replicate-ignore-db:设置只读取哪个库的数据
1
replicate-ignore-db=库名
replicate-ignore-table:设置只读取哪个库中的哪个表的数据
1
replicate-ignore-table=库名.表名
replicate-wild-ignore-table:设置只读取哪个库中的通配符指定的表
1
replicate-wild-ignore-table=库名.x*
白名单
replicate-do-db
1
replicate-do-db=库名
replicate-do-table
1
replicate-do-table=库名.表名
replicate-wild-do-table
1
replicate-wild-do-table=库名.x*
需求示例
1 | # 主库列表 |
实现一主三从,过滤复制
搭建主从库并配置延时从库
主库(db01)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 修改配置文件
vim /etc/my.cnf
[mysqld]
# 在mysqld标签下配置
basedir=/app/mysql
datadir=/app/mysql/data
server_id =1
# 标识符,主库和从库server-id不相同即可
skip-name-resolve
log_bin=mysql-bin
# 登录数据库
mysql -uroot -pHelp9090
# 创建rep用户
mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by 'Help9090';
# 做打点全备
mysqldump -uroot -pHelp9090 -A -R --triggers --master-data=1 --single-transaction > /tmp/master.sql
# 发送到从库
scp /tmp/master.sql 172.16.1.52:/tmp/ 172.16.1.53:/tmp/ 172.16.1.54:/tmp/从库(db02、db03、db04)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32# 1.修改配置文件
vim /etc/my.cnf
[mysqld]
# 在mysqld标签下配置
basedir=/app/mysql
datadir=/app/mysql/data
server_id =2
# 标识符,主库和从库server-id不相同即可
skip-name-resolve
log_bin=mysql-bin
replicate-do-db=test1
# 2.重启mysql
/etc/init.d/mysqld restart
# 3.恢复全备数据
mysql -uroot -pHelp9090 < /tmp/master.sql
# 4.登陆数据库
mysql -uroot -pHelp9090
# 5.执行change master to 语句
mysql> change master to
master_host='10.0.0.51',
master_user='rep',
master_password='Help9090',
# 6.开启主从复制
mysql> start slave;
# 7.查看从库状态
mysql> show slave status\G