MySQL主从复制快速部署技巧

一、mysqldump –master-data参数介绍

MySQL主从复制原理图

按照mysql最经典的部署主从复制的方式,必须要经过锁表,再导出全备数据,最后再解锁的步骤,这样的操作略显繁琐

事实上mysqldump命令中提供了一个比较方便的参数,即–master-data
下面内容来自官方手册:

It causes the dump output to include a CHANGE MASTER TO statement that indicates the binary log coordinates (file name and position) of the dumped server. These are the master server coordinates from which the slave should start replicating after you load the dump file into the slave.

也就是说,这个参数会当前binlog文件名和位置一并输出到文件,这就方便我们在从库上恢复数据时,不用再人工核对binlog坐标,同时dump数据时还会打开全局的读锁(相当于–lock-all-tables,-x),可以说–master-data参数就是为了部署从库而设计的

二、操作过程

1. 确认主库开启binlog功能,并保证server-id各不相同

2. mysqldump命令对主库的数据进行全备

# mysqldump -uroot -p -A -B --events --master-data=1|gzip >/server/backup/mysql_bak_master_data_$(date +%F).sql.gz

3.将备份文件迁移到从库服务器

4.从库执行change master to…命令

mysql> change master to
> master_host='172.16.1.52',
> master_port=3306,
> master_user='rep',
> master_password='password';

说明:change master 命令需要在下面的恢复数据步骤之前执行,否则由master-data=1产生的change master语句写入master.info的内容会被手动执行change master后修改,亦即,先恢复数据时,master.info命令写入binlog的坐标,接着再手动执行change master to配置主库地址,账号等信息时,就会把master.info的内容覆盖掉,从而丢失了binlog坐标信息

5.从库上恢复数据

# cd /server/backup
# gzip -d mysql_bak_master_data_2016-08-04.sql.gz
# mysql -uroot -p </server/backup/mysql_bak_master_data_2016-08-04.sql
# cat /data/3308/data/master.info 
18
mysql-bin.000003
2503
172.16.1.52
rep
password
3306
60
0





0
1800.000

0

6. 从库启动复制

# mysql -uroot -p -e "start slave;"
# mysql -uroot -p -e "show slave status \G;"
*************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send event
 Master_Host: 172.16.1.52
 Master_User: rep
 Master_Port: 3306
 Connect_Retry: 60
 Master_Log_File: mysql-bin.000003
 Read_Master_Log_Pos: 2503
 Relay_Log_File: relay-bin.000002
 Relay_Log_Pos: 253
 Relay_Master_Log_File: mysql-bin.000003
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
……
 Seconds_Behind_Master: 0
……

说明:如果start slave启动复制失败,则使用reset slave all命令清空所有的从库连接参数,然后再按照上述步骤执行一次即可