1.1 mysql主从同步

    参考博客:https://www.cnblogs.com/kevingrace/p/6256603.html

  1、mysql主从同步(复制)概念

      1. 将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的。

      2. 复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。

      3. 主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。

      4. 当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。

      5. 从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

      binlog:是二进制日志文件,用于记录mysql的数据更新或者潜在更新(比如DELETE语句执行删除而实际并没有符合条件的数据)

  2、Mysql支持哪些复制

      1. 基于语句的复制: 在主服务器执行SQL语句,在从服务器执行同样语句。

          注:MySQL默认采用基于语句的复制,效率较高。一旦发现没法精确复制时, 会自动选基于行的复制。

      2. 基于行的复制: 把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持

      3. 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

  3、Mysql主从复制原理

      1. master服务器将数据的改变都记录到二进制binlog日志中,只要master上的数据发生改变,则将其改变写入二进制日志;

      2. salve服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件

      3. 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中

      4. 从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致

      5. 最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒。

      需要理解:

        1)从库会生成两个线程,一个I/O线程,一个SQL线程;
        2)I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
        3)主库会生成一个log dump线程,用来给从库I/O线程传binlog;
        4)SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

  4、Mysql复制流程图

      1. master将操作语句记录到binlog日志中

      2. salve服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变

      3. salave开启两个线程:IO线程和SQL线程

        1)IO线程:负责读取master的binlog内容到中继日志relay log里;

        2)SQL线程:负责从relay log日志里读出binlog内容,并更新到slave的数据库里(保证数据一致)

      

1.2 MySQL同步延迟问题

  1、造成mysql同步延迟常见原因

      1)网络:如主机或者从机的带宽打满、主从之间网络延迟很大,导致主上的binlog没有全量传输到从机,造成延迟。

      2)机器性能:从机使用了烂机器?比如主机使用SSD而从机还是使用的SATA。

      3)从机高负载:有很多业务会在从机上做统计,把从机服务器搞成高负载,从而造成从机延迟很大的情况

      4)大事务:比如在RBR模式下,执行带有大量的delete操作,这种通过查看processlist相关信息以及使用mysqlbinlog查看binlog中的SQL就能快速进行确认

      5)锁: 锁冲突问题也可能导致从机的SQL线程执行慢,比如从机上有一些select .... for update的SQL,或者使用了MyISAM引擎等。

  2、硬件方面(优化)

      1.采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。

      2.存储用ssd或者盘阵或者san,提升随机写的性能。

      3.主从间保证处在同一个交换机下面,并且是万兆环境。

      总结:硬件强劲,延迟自然会变小。一句话,缩小延迟的解决方案就是花钱和花时间。

  3、mysql主从同步加速

      1)sync_binlog在slave端设置为0

        当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘

        而让Filesystem自行决定什么时候来做同步,这个是性能最好的。

      2)slave端 innodb_flush_log_at_trx_commit = 2

        每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。

        该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

      3)–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。

      4)直接禁用slave端的binlog

1111111111111

08: mysql主从原理的更多相关文章

  1. Mysql主从原理

    MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对mysql有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...

  2. mysql主从原理及配置

    一.mysql集群架构: 1.一主一从 2.双主 3.一主多从(扩展mysql的读性能) 4.多主一从(5.7开始支持) 5.联机复制 关系图: 二.配置主从用途及条件 2.1用途 1.保障可用性,故 ...

  3. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  4. 部署和调优 2.7 mysql主从配置-1

    MySQL 主从(MySQL Replication),主要用于 MySQL 的时时备份或者读写分离.在配置之前先做一下准备工作,配置两台 mysql 服务器,如果你的机器不能同时跑两台 Linux虚 ...

  5. MySQL主从配置详解

    一.mysql主从原理 1. 基本介绍 MySQL 内建的复制功能是构建大型,高性能应用程序的基础.将 MySQL 的 数亿分布到到多个系统上去,这种分步的机制,是通过将 MySQL 的某一台主机的数 ...

  6. MySQL 主从复制原理及过程讲解

    mysql主从原理描述,摘自老男孩. 下面简 单描述下 MySQL Replication 复制的原理及过程 . 1.在 Slave 服务器上执行 start slave 命令开启主从复制开关,主从复 ...

  7. MySQL主从同步原理 部署【转】

    一.主从的作用:1.可以当做一种备份方式2.用来实现读写分离,缓解一个数据库的压力二.MySQL主从备份原理master 上提供binlog ,slave 通过 I/O线程从 master拿取 bin ...

  8. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

    双机热备的概念简单说一下,就是要保持两个数据库的状态 自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换 ...

  9. MYSQL 主从服务器配置工作原理

    一.        主从配置的原理: Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instanc ...

随机推荐

  1. GO语言学习笔记1-输入带空格的字符串

    最近开始学习GO语言,并做了一些编程练习.有道题要输入带空格的字符串,这在C/C++中很容易实现,但GO中好像并不那么容易.学过C/C++的可能都知道,在C中可以使用gets()函数,在C++可以使用 ...

  2. Django之nginx+wsgi后台部署(最新版)

    0-部署准备 1.要使用安全组打开腾讯云的80端口 腾讯云的80端口不能访问​www.jianshu.com 以实际项目部署为例 项目名称api_learn: Python版本:python 3.6. ...

  3. ELK结合logback

    之前ELK的安装可以查看前面一篇博客 下面是我的logback的配置文件,通过logback的appender直接导入logstash <?xml version="1.0" ...

  4. 【BZOJ2118】墨墨的等式(同余最短路)

    题意: 思路:From https://www.cnblogs.com/GavinZheng/p/11709153.html#4421510 写的1e9,int范围的 #include<bits ...

  5. Eclipse通过JDBC连接MySQL数据库的步骤(最原始的几个步骤)

    java可以兼容目前市面上所有类型的数据库,主要是因为提供了两个接口,一个用于连接目标数据库,一个用于向数据库中传输SQL命令. Connection接口——连接目标数据库: Statement  接 ...

  6. pyinstaller打包的exe太大?你需要嵌入式python玄学

    pyinstaller打包一个exe动辄几十M几百M (特别是import pandas以后) 知乎上居然没有人po这方面的”知识“(手动狗头) 查了很多关于reduce pyinstaller打包出 ...

  7. Python-Django WebAPi基本使用方法

    目的 利用django搭建一个WebApi,实现数据库表的增删查改. 数据传输基于Http协议,数据格式:JSON ORM方式进行数据库表的CRUD(增删查改) 开发步骤 使用pycharm专业版搭建 ...

  8. jquery自动播放音频文件

    使用jquery自动播放音频文件 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  9. c/c++二级指针动态开辟内存

    c版: #include <stdio.h> #include <stdlib.h> #define row 4 #define col 8 int main() { int ...

  10. MS入门学习笔记

    1.建立晶体:选择晶系,添加原子:2.导入系统晶体文件:3.建立分子molecule,画原子:4.计算简单分子molecule:注意事项: 1)做了一个H2O分子,接下来要做一个“立体壳子”,因为CA ...