MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server 的 Instance 中。虽然复制过程并不是实时而是异步进行的,但是由于其高效的性能设计,延时非常之少。

  Mysql 的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的 实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端 , 另外一个线程(IO 线程)在Master 端。

  必须打开 Master 端的 Binary Log(mysqlbin.xxxxxx)功能,打开方式有两种,分别是:

  1.通过在启动 MySQL Server 的过程中使用“—log-bin” 参数选项;

  2.在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数;

MySQL 复制的基本过程如下:

1. Slave 上面的 IO 线程连接上 Master,并请求从指定日志文件的指定位置(或者从 最开始的日志)之后的日志内容;

2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请 求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信 息中除

了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;

3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的 Relay Log 文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的 Master 端的 binlog 的文

件名和位置记录到 master-info 文件中,以便在下一次读取的时候能够清楚的 高速 Master“我需要从某个 bin-log 的哪个位置开始往后的日志内容,请发给我”

4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文 件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执 行这些

Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所 以两端的数据是完全一样的。

复制实现级别

  MySQL 的复制可以是基于一条语句(Statement Level),也可以是基于一条记录(Row level),可以在 MySQL 的配置参数中设定这个复制级别,不同复制级别的设置会影响到 Master 端的 Binary Log 记录成不同的形式。

  1. Row Level:Binary Log 中会记录成每一行数据被修改的形式,然后在 Slave 端 再对相同的数据进行修改。

  2. Statement Level:每一条会修改数据的 Query 都会记录到 Master 的 Binary Log 中。Slave 在复制的时候 SQL 线程会解析成和原来 Master 端执行过的相同的 Query 来再次执行。

  3.Mixed Level,实际上就是前两种模式的结合。在 Mixed 模式下,MySQL 会根据执行的每一条具体的 Query 语句来区分对待记录的日志形式,也就是在 Statement 和 Row 之间选择一种。

Replication 常用架构:

1.Master - Slaves

2. Master - Master

3.级联复制

4. Dual Master 与级联复制结合架构

最新文章

  1. 如何使用IconFont字体图标代替网页图片?
  2. cadence16.3破解方法
  3. Mysql单实例脚本自动化安装
  4. 周末充电之WPF(三 ) .后台动态生成控件
  5. Labeling Balls
  6. TCP和UDP的"保护消息边界" (经典)
  7. VMI
  8. Android 之异步任务(AsyncTask,Handler,Message,looper)
  9. Markdown中特殊字符的转义字符
  10. IntelliJ IDEA快捷键与使用小技巧
  11. canvas-a10isPointPath.html
  12. Django中cookie&session的实现
  13. OSLab课堂作业2
  14. 哪个先执行:@PostConstruct和@Bean的initMethod?
  15. 大数加减法 - java实现
  16. mfc获取控件在对话框上的位置
  17. c++开发之对应Linux下的sem_t和lock
  18. iOS APP 新增表情包拓展
  19. 实战iOS7之NSURLSession
  20. PHP-Gealman

热门文章

  1. MFC项目实战(1)文件管理器--界面设计篇
  2. Python代码分析工具
  3. 设计模式-(11)组合模式 (swift版)
  4. XMU 1071 圣斗士黄金十二宫(七)银河星爆 【计算几何】
  5. ATan2与ATan的区别
  6. RK3288 make otapackage 出错的问题【转】
  7. shell系统管理
  8. YTU 1005: 渊子赛马
  9. go string []byte相互转换
  10. Wireshark抓包分析TCP协议