mysql表锁行锁和分页锁(MySQL 不停机不锁表主从搭建)
mysql表锁行锁和分页锁
MySQL 不停机不锁表主从搭建
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;
通过这种方法,可以在不停止业务的情况下,保证数据一致性的同时,快速扩展从库
原文链接:https://mp.weixin.qq.com/s/AOmFBZm0YYfnvDHd58tikg
- mysql实验总结分析(MySQL查询截取的深入分析)
- mysql重启启动失败(MySQL8.0无法启动3534的解决方法)
- thinkphp5怎么设置默认返回(thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结)
- mysql双主状态不一致(MySQL GTID主备不一致的修复方案)
- mysql发生系统错误(MySQL too many connections错误的原因及解决)
- mysql编码设置
- mysql数据库基本使用方法(详解MySQL 数据库范式)
- mysql 存储引擎有哪些(MySQL 常见存储引擎的优劣)
- idea安装mybatis(IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug)
- mysql的sql语句优化5种方式(MySQL:五个常见优化SQL的技巧)
- mysql快速添加百万条记录(Mysql快速插入千万条数据的实战教程)
- mysql怎么把行变列(MySQL 中行转列的方法)
- mysql中的null和空值的区别(解决mysql使用not in 包含null值的问题)
- mysql获取随机数(MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法)
- python导出数据到mysql(python定时按日期备份MySQL数据并压缩)
- 如何使java与sqlserver数据库连接(java连接mysql数据库 java连接sql server数据库)
- 战 疫 时刻 致敬每一位石化大学的 守护者(战疫时刻)
- 老弄堂里的市井味道(老弄堂里的市井味道)
- 小米音乐可绑定QQ音乐, QQ音乐 真的会消失在小米的设备上吗(小米音乐可绑定QQ音乐)
- 小米Watch S1评测 或许能成为小米冲击高端可穿戴设备的里程碑(小米WatchS1评测或许能成为小米冲击高端可穿戴设备的里程碑)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
- 小米音乐与 QQ 音乐合作,便捷迁移会员(小米音乐与QQ音乐合作)
热门推荐
- css3导航菜单(CSS3实现的侧滑菜单)
- C#正则表达式Regex类的用法
- vue虚拟dom如何转换成真实dom的(vue中对虚拟dom的理解知识点总结)
- vue在html里面怎么展示图片(v-html渲染组件问题)
- 什么是HttpHandler
- mysql binlog模式实际使用(实例验证MySQL|update字段为相同的值是否会记录binlog)
- php怎么实现邮件发送(使用php的mail函数实现发送邮件功能)
- dedecms语法教程(dedecms 获取描述信息限制字数的语法)
- php添加到数组的用法(详解PHP 7.4 中数组延展操作符语法知识点)
- asp的定义和意义(小旋风ASPWEBServer是什么?有什么作用?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9