MySQL5.7不停机不锁表主从配置
MySQL主从搭建分几种场景
- 无业务数据,初始化搭建
- 有业务数据,临时扩展
初始化的搭建很简单,不涉及数据业务,所以锁表、停机等都不影响,但是更多时候是业务到一定阶段,才会涉及到横向扩展,需要做主从,读写分离等来提升服务性能
这个时候,数据业务不能中断,又需要快速进行扩展提升性能,只能在不停机、不停服务的情况下扩展,就需要用到下面介绍的这种方法来做数据库主从
当然还是有前提条件,如果你原本MySQL连binlog及server_id都这种基础配置都没做,那也谈不上不停机配置主从
原理
不停机实现主从搭建的关键点就是以下两个参数:
- --single-transaction
- --master-data
master-data参数主要用来记录主库的binlog_file和pos,它有两个值,分别是:
1:在mysqldump过程中,将binlogfile和pos信息记录在sql中,并且不是以注释信息的方式记录,这样在执行导入的时候自动执行这部分信息
2:在mysqldump过程中,将binlogfile和pos信息以注释的方式记录在sql中
single-transaction参数则是通过提交单一事务来确保数据一致性,通过在FLUSH TABLES WITH READ LOCK 后添加START TRANSACTION 语句,开启单一事务,此时加锁,仅仅是为了获取准确的master-data中的binlogfile和pos信息,在开启事务后,锁已经释放了,所以对业务影响很小
通过以上两个参数,可以在不长时间锁表的情况下获取准确的binlogfile和pos信息,从而完成主从配置
实战
导出数据
从主库通过mysqldump导出数据
mysqldump -uroot -ppassword --single-transaction --master-data=2 --databases db1 db2 xxx > databases.sql
打包压缩
tar -zcvf databases.sql.tar.gz databases.sql
复制到从库
scp databases.sql.tar.gz root@slave_ip:/data/sql/
后面的操作在从库进行
解压
tar -zxvf databases.sql.tar.gz
导入数据
source /path_to/databases.sql.tar.gz
配置主从同步参数
change master to master_host='ip',master_user='slave',master_port=port,master_password='password',master_log_file='mysql-bin.file',master_log_pos=POS;
其中master_log_file和master_log_pos就是上面通过master-data=2参数导出的,在sql文件里面开头部分
启动slave同步
start slave;
查看同步状态
show slave status\G;
总结:
通过这种方法,可以在不停止业务的情况下,保证数据一致性的同时,快速扩展从库