MySQL DBA MySQL复制技术的变革(九)

摘要:
复制的瓶颈和改进建议复制建议语句格式不足以理解binlog记录的最小单位是一个事件。

复制环境搭建:基于ROW+GTID

statement格式复制不足及解决办法

GTID用于解决什么问题

半同步复制有什么缺点?增强半同步用于解决什么问题?半同步会不会有延迟?

复制的瓶颈点及改进建议

复制建议选择

 MySQL DBA MySQL复制技术的变革(九)第1张

 MySQL DBA MySQL复制技术的变革(九)第2张

statement格式复制不足

理解binlog

记录最小的单位是一个Event。前4个字节是magic number,接下来的19个字节记录Format desc event:FDE

一个事务由多个Event组成

(hexdump mysql-bin.00000x |head -n 3)

now()取到的是set timestamp的值

sysdate()取到的是系统的时间

show binlog events in 'mysql-bin.00000x'

row格式,binlog每条语句都带有库名

statement是加use

row格式优点

相对statement格式更加安全的复制格式

在某些情况下复制速度更快(sql复杂,表有主键)

系统的特殊函数也可以复制

更少的锁

缺点

binary log比较大(支持binlog_row_image)

单条语句更新【删除】表的行数过多,会形成大量的binlog

无法从binlog看见用户执行的sql(Event:binlog_row_query_log_events,记录用户的query)

uuid()结果太多离散,insert写入慢

MySQL DBA MySQL复制技术的变革(九)第3张

 GTID用于解决什么问题

事务是由谁产生的,产生了多少事务,复制架构中求事务个数差集非常简单

gtid_purged  --表示已经过期的日志的位置

监控方便

半同步                                         

半同步复制有什么缺点?

增强半同步用于解决什么问题?

半同步会不会有延迟?

rpl_semi_sync_master_wait_point=after_commit

redo(xid)->binlog->redo commit(同时redo中写入binlog filename,pos)--表示日志是完整的,commit阶段完成

Xid同一个binlog是顺序增长的

redo->Xid

-- 写完binlog后,binlog会持久化到磁盘,在此阶段,如果server crash,重启mysqld时候,他会扫描redo中处于prepare状态xid,同时扫描last binary log,看看xid有没有在binlog里面,如果在,则commit,如果没有则rollback

业务层幻读

https://cloud.tencent.com/developer/news/299922

https://win-man.github.io/2018/08/10/MySQL%E5%A2%9E%E5%BC%BA%EF%BC%88Loss-less%EF%BC%89%E5%8D%8A%E5%90%8C%E6%AD%A5%E5%A4%8D%E5%88%B6/#Dump%E7%BA%BF%E7%A8%8B%E7%9A%84%E4%BC%98%E5%8C%96

引擎层已经commit,但是dump线程还未dump binlog时master crash,那么主库的数据就会比从库多

 MySQL DBA MySQL复制技术的变革(九)第4张

增强半同步                                                                            

半同步复制有什么缺点?

rpl_semi_sync_master_wait_point=after_sync

如果在dump线程还未dump binlog时master crash,那么主库重启后的数据会比从库多

幽灵事务--掉电情况会发生

rpl_semi_sync_master_timeout

没有从库会hang住

https://bugs.mysql.com/bug.php?id=83158

MySQL DBA MySQL复制技术的变革(九)第5张

业务层幻读

MySQL DBA MySQL复制技术的变革(九)第6张

MySQL DBA MySQL复制技术的变革(九)第7张

 MySQL DBA MySQL复制技术的变革(九)第8张

MySQL DBA MySQL复制技术的变革(九)第9张

MySQL DBA MySQL复制技术的变革(九)第10张

 MySQL DBA MySQL复制技术的变革(九)第11张

MySQL DBA MySQL复制技术的变革(九)第12张

MySQL DBA MySQL复制技术的变革(九)第13张

 MySQL DBA MySQL复制技术的变革(九)第14张

 MySQL DBA MySQL复制技术的变革(九)第15张

 MySQL DBA MySQL复制技术的变革(九)第16张

 MySQL DBA MySQL复制技术的变革(九)第17张

免责声明:文章转载自《MySQL DBA MySQL复制技术的变革(九)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NOIP注意事项什么是进程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ActiveMQ之JMS及保证消息的可靠性<持久化、事务、签收>(三)

1.JAVAEE 是一套使用Java 进行企业级开发的13 个核心规范工业标准 , 包括:  JDBC  数据库连接  JNDI  Java的命名和目录接口  EJB   Enterprise java bean  RMI   远程方法调用    一般使用TCP/IP 协议  Java IDL    接口定义语言  JSP      Servlet   X...

安装dcm4chee-arc-light-5.4.1-mysql步骤

一.进入网址: https://github.com/dcm4che/dcm4chee-arc-light/wiki/Installation这个是GitHub上面给的步骤,可能会比较难理解,按照所给的步骤做,可能会出现各种问题,在此将笔者遇见的问题列举出来,并给出解决方案。 二.安装所需环境: 1、JDK 1.8.0_912、wildfly-10.0...

EF架构~关系表插入应该写在事务里,但不应该是分布式事务

回到目录 这个标题很有意思,关系表插入,就是说主表和外表键在插入时,可能会有同步插的情况,如在建立主表时,扩展表需要同步完成数据的初始化工作,而对于多表插入时,我们为了保证数据的一致性会针它写在事务中,而对于.net中的事件,它在一些情况下,会不那么单纯,对于ef和linq to sql来说,你的事务如果出现多次提交动作(submitchange | sa...

docker部署禅道及开启MySQL远程登录

禅道作为一个开源的项目管理工具,其功能足以满足日常开发、运维、测试及产品版本迭代,重要的是免费、可定制,好处不用多数,业内用的也比较广泛(主要是互联网企业) 关于禅道的部署可以参考官网:https://www.zentao.net/book/zentaopmshelp/405.html 有了docker,使得禅道的部署变得非常简单,只需如下几个步骤即可完成...

mysql三种删除方式

一般来说mysql有三种删除数据方式: 1. delete(常用) 2. truncate(慎用) 3. drop 以上三种方式都可以删除数据,但是使用场景是不同的。 从执行速度来说: drop > truncate >> DELETE 深入底层来说: 一、DELETE DELETE是属于数据库的DML操作语言,使用delete删除数据时...

Mysql综合练习作业50题

#作业库create database db8 charset utf8; #年级表create table class_grade(gid int not null primary key auto_increment,gname varchar(20) not null unique); #班级表create table class(cid int p...