作家
登录

MySQL主从同步那点事儿

作者: 来源: 2017-09-12 10:23:27 阅读 我要评论

51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦!


一、媒介

关于mysql主大年夜同步,信赖大年夜家都不陌生,跟着体系应用拜访量逐渐增大年夜,单台数据库读写拜菲揭捉?力也随之增大年夜,当读写拜访达到必定瓶颈时,将数据库的读写效力骤然降低,甚至弗采取;为懂得决词攀类问题,平日会采取mysql集群,当主库宕机后,集群会主动将一个大年夜库进级为主库,持续对外供给办事;那么主库和大年夜库之间的数据是若何同步的呢?本文┞冯对MySQL 5.7版本进行下面的分析,下面漫笔者一路商量一下mysql主大年夜是若何同步的。

MySQL主大年夜同步那点事儿

二、MySQL主大年夜复制道理

为了减轻主库的压力,应当在体系应用层面做读写分别,写操作走主库,读操作走大年夜库,下图为MySQL官网给出的主大年夜复制的道理图,大年夜图中可以简单的懂得读写分别及主大年夜同步的过程,分散了数据库的拜菲揭捉?力,晋升全部体系的机能和可用性,降低了大年夜拜访量激发数据库宕机的故障率。

MySQL主大年夜同步那点事儿

因为主大年夜同步延迟是客不雅存在的,我们只能大年夜我们本身的架构长进行设计, 尽量让主库的DDL快速履行。下面列出几种常见的解决筹划:

  1. 营业的持久化层的实现采取分库架构,mysql办事可平行扩大,分散压力。
  2. 办事的基本架构安营业和mysql之间参加memcache或者Redis的cache层。降低mysql的读压力;
  3. 应用比主库更好的硬件设备作为slave;
  4. sync_binlog在slave端设置为0;
  5. –logs-slave-updates 大年夜办事器大年夜主办事器接收到的更新不记入它的二进制日记。
  6. 禁用slave的binlog

三、binlog简介

MySQL主大年夜同步是基于binlog文件主大年夜复制实现,为了更好的懂得主大年夜同步过程,这里简单介绍一下binlog日记文件。

binlog日记用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事宜”的情势保存,它描述数据更改,它是以二进制的情势保存在磁盘中。我们可以经由过程mysql供给的查看对象mysqlbinlog查看文件中的内容,例如 mysqlbinlog mysql-bin.00001 | more,这里留意一下binlog文件的后缀名00001,binlog文件大年夜小和个数会赓续的增长,当MySQL停止或重启时,会产生一个新的binlog文件,后缀名会按序号递增,例如mysql-bin.00002、mysql-bin.00003,并且当binlog文件大年夜小跨越 max_binlog_size体系变量设备时也会产生新的binlog文件。


(一)binlog日记格局

(1) statement : 记录每一条更改数据的sql;

  • 长处:binlog文件较小,节约I/O,机能较高。
  • 缺点:不是所有的数据更改都邑写入binlog文件中,尤其是应用MySQL中的一些特别函数(如LOAD_FILE()、UUID()等)和一些不肯定的语句操作,大年夜而导致主大年夜数据无法复制的问题。

(2) row : 不记录sql,只记录每行数据的更改细节

  • 长处:具体的记录了每一行数据的更改细节,这也意味着不会因为应用一些特别函数或其他情况导致不克不及复制的问题。
  • 缺点:因为row格局记录了每一行数据的更改细节,会产生大年夜量的binlog日记内容,机能不佳,并且会增大年夜主大年夜同步延筹划现的几率。

(3) mixed:一般的语句修改应用statment格局保存binlog,如一些函数,statement无法完成主大年夜复制的操作,则采取row格局保存binlog,MySQL会根据履行的每一条具体的sql语句来区分对待记录的日记情势,也就是在Statement和Row之间选择一种。

(二)binlog日记内容

mysqlbinlog敕令查看的内容如下:

MySQL主大年夜同步那点事儿

根据事沂攀类型查看的binlog内容:

MySQL binlog记录的所有操作实际上都有对应的事沂攀类型的,譬如STATEMENT格局中的DML操尴尬刁难应的是QUERY_EVENT类型,ROW格局下的DML操尴尬刁难应的是ROWS_EVENT类型,如不雅想懂得更多请参考官方文档,有关binlog日记内容不在这里过多赘述,简单介绍一下是为了更好的懂得主大年夜复制的细节,下面我们进入正题。

四、MySQL主大年夜复制道理

(三)binlog事沂攀类型

mysql主大年夜复制须要三个线程,master(binlog dump thread)、slave(I/O thread 、SQL thread)。

master

(1)binlog dump线程:当主库中稀有据更新时,那么主库就会根据按照设置的binlog格局,将此次更新的事沂攀类型写入到主库的binlog文件中,此时主库会创建log dump线程通知slave稀有据更新,当I/O线程请求日记内容时,会将此时的binlog名称和当前更新的地位同时传给slave的I/O线程。

slave

(2)I/O线程:该线程会连接到master,向log dump线程请求一份指定binlog文件地位的副本,并将请求回来的binlog存到本地的relay log中,relay log和binlog日记一样也是记录了数据更新的事宜,它也是按照递增后缀名的方法,产生多个relay log( host_name-relay-bin.000001)文件,slave会应用一个index文件( host_name-relay-bin.index)来追踪当前正在应用的relay log文件。


  推荐阅读

  Struts2 新漏洞(S2-052)出现利用实例,面对漏洞企业应当分秒必争

51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦! 9月5日,千疮百孔的 Struts2 应用又曝出存在新的高危长途代码履行马脚(S2-052)。该漏洞竽暌股 lgtm.com >>>详细阅读


本文标题:MySQL主从同步那点事儿

地址:http://www.17bianji.com/lsqh/37330.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)