MySQL 不停机不锁表主从搭建

数据库 MySQL
初始化的搭建很简单,不涉及数据业务,所以锁表、停机等都不影响,但是更多时候是业务到一定阶段,才会涉及到横向扩展,需要做主从,读写分离等来提升服务性能。

 [[407459]]

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导出数据

  1. mysqldump -uroot -ppassword --single-transaction --master-data=2 --databases db1 db2 xxx > databases.sql 

打包压缩

  1. tar -zcvf databases.sql.tar.gz databases.sql 

复制到从库

  1. scp databases.sql.tar.gz root@slave_ip:/data/sql/ 

后面的操作在从库进行

解压

  1. tar -zxvf databases.sql.tar.gz 

导入数据

  1. source /path_to/databases.sql.tar.gz 

配置主从同步参数

  1. 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同步

  1. start slave; 

查看同步状态

  1. show slave status\G; 

通过这种方法,可以在不停止业务的情况下,保证数据一致性的同时,快速扩展从库

责任编辑:武晓燕 来源: 运维研习社
相关推荐

2020-04-13 15:45:46

MySQL数据库备份

2018-03-14 09:49:35

数据库迁移

2017-05-17 10:05:30

SQL Server镜像数据库

2022-09-01 09:52:18

应用解决方案

2010-11-22 14:27:05

MySQL锁表

2016-11-01 13:06:58

大数据数据中心

2013-03-14 10:19:51

数据中心升级停机数据中心

2020-05-06 13:47:42

ZooKeeperKubernetes迁移

2009-09-04 03:43:03

IBMsystemdirector

2021-04-19 09:37:12

RocketMQ集群版本

2022-10-08 09:33:00

平台中间件

2024-03-04 00:01:00

锁表锁行MySQL

2010-05-24 12:50:59

MySQL表级锁

2020-10-20 13:50:47

MySQL数据库

2019-01-02 16:40:13

MongoDBPostgres数据库

2024-04-10 14:27:03

MySQL数据库

2018-07-31 10:10:06

MySQLInnoDB死锁

2022-10-24 00:33:59

MySQL全局锁行级锁

2022-07-20 08:06:57

MySQL表锁Innodb

2010-10-14 16:18:21

MySQL表锁情况
点赞
收藏

51CTO技术栈公众号