MySQL Replication  新功能介绍  北京万里开源软件有限公司 2011 年 8 月
万里开源和 MySQL - 开源软件解决方案和技术服务提供商,推广使用开放源代码 的 LAMP  架构。 - 2006 年携手 MySQL AB 共建 MySQL 中国研发中心,   先后在 MySQL Cluster 和 Replication  功能上进行合作开发。
MySQL 5.5 Replication  新功能和改进  - Semi-synchronous Replication - Replication Heartbeat - Automatic Relay Log Recovery - Replication Per Server Filtering - Replication Slave Side Data Type Conversions 参考 - http://blogs.oracle.com/mysql/entry/mysql_55_whats_new_in_replication - http://dev.mysql.com/doc/refman/5.5/en/replication.html - https://www.mysql.com/news-and-events/on-demand-webinars/display-od-572.html
Semi-Synchronous Replication 目标 - 当 COMMIT 语句成功返回后,该事务的所有日志已经被同步到了 Slave 上 - 如果这时 Master 发生故障,用户能从 Slave 上看到所有在 Master 看到的数据 实现方法 - 等待应答机制 -  Master 在事务提交后,将等待至少一个 slave 的应答,此应答意味着整个事务的 日志已经复制到 了 slave 上 - Slave  在一个事务的所有 binary log 都写入 relay log 并刷新到磁盘后, 就立刻应答 Master - Binary Log Event  前添加了一个 Semi-Sync Header.  有是否应答的标志 位。 COMMIT,ROLLBACK, DDL -  应答内容为 master_log_file 和 master_log_pos
Semi-Synchronous Replication Master 上 COMMIT 返回后的两种含义 - 得到了 Slave 的响应,数据已经复制到了 Slave 上 - 等待超时, 数据没有复制到 Slave 上 .  转变为异步方 式。 Master 上的操作不能回滚
MySQL 5.6 Replication  新功能和改进 - Multi-Threaded Slaves - Crash-Safe - Time-Delayed Replication - Informational Log Events - Optimized Row-Based Replication - Replication Checksums - Server UUIDs - Binlog API - Binlog Group Commit - Remote Binlog Back-up
Crash-Safe On Master binlog.index  的容错 -  备份 binlog.index 文件 Binary Log 和 Master  数据的一致性 - 事务日志已经完整写入 Binary Log,  但是未提交 利用 xid Events,  恢复这些事务 - 事务日志未完整写入,也未提交 从 Binary Log 中删除不完整事务的日志
Crash-Safe On Slave slave-relay-bin.index  的容错 -  备份 slave-relay-bin.index 文件 master.info, relay-log.info 和 Slave  数据的一致性 - master.info  和  relay-log.info  存入系统表,并可修改引擎类型 slave_master_info, slave_relay_log_info 。 -  对这两个表的操作,包含在正在执行的事务中 Round-Robin Multi-Source Replication in Pure SQL - http://mysqlmusings.blogspot.com/2011/04/round-robin-multi-source-in-pure-sql.html 参考  -  http://mysqlmusings.blogspot.com/2011/04/crash-safe-replication.html
Time-Delayed Replication Slave 滞后 Master 一定时间后再执行 Binary Log - CHANGE MASTER TO MASTER_DELAY = N; 目的 - 阻止用户在 Master 上的错误扩散到 Slave 上 - 检测一段时间以前的数据库系统的状况 - 测试目的 参考  - http://dev.mysql.com/doc/refman/5.6/en/replication-delayed.html
Informational Log Events Informational Log Event 是一个新的 Binary Log Event 族 . Master  可以通过这些 Events 将额外的信息发送到 Slave 。 - 不包含任何数据,不影响 Slave 上的数据。 - 只包含一些信息 , 这些信息可以被 mysqlbinlog,  SHOW BINLOG EVENTS  打印出来。 - 主要用于调试 - Event Header 中设置 LOG_EVENT_IGNORABLE_F 标志
Informational Log Events Rows Query Log Event - 在 Row 模式下,记录生成 Rows Log Events 的语句 - --binlog_rows_query_log_events 参考 - http://d2-systems.blogspot.com/2011/04/mysql-562-dm-binlog-informational.html
Remote Binlog Back-up mysqlbinlog - --raw - --read-from-remote-server - --stop-never 参考 - http://dev.mysql.com/doc/refman/5.6/en/mysqlbinlog-backup.html
Multi-Threaded Slaves Multi-Threaded Slaves 实现了多个 SQL Threads  并发的执行不同的事务 Slave 的组成 - 1  个  I/O Thread - 1  个 SQL Coordinator Thread 分发 Binary log Events 到不同的  Worker  Threads - N 个 SQL  Worker Threads 执行  Binary log Events
Multi-Threaded Slaves 限制 - Database 级别的并发,两个事务修改了同一个 database 中的表,则要顺序执行。 参考  - http://d2-systems.blogspot.com/2011/04/mysql-56x-feature-preview-multi.html - http://d2-systems.blogspot.com/2011/07/update-on-multi-threaded-slave.html
Optimized Row-Based Replication 在 row 模式下,复制数据时,只复制必要的字段,而 不复制整行数据。减少 Binary Log 占用的空间和网络 传输时间。 Variable binlog-row-image  - full - noblob  - minimal
Optimized Row-Based Replication Before Row - 只复制主键字段或非空唯一键字段 After Row - 对于 UPDATE ,只复制被修改的字段 - 对于 INSERT ,复制所有字段 参考 - http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary- log.html#sysvar_binlog_row_image  - http://d2-systems.blogspot.com/2011/04/mysql-562-dm-optimized-row-based.html
Email: Anders.Song@greatopensource.com Q&A 谢谢!
参考书

MySQL Replication新功能介绍

  • 1.
    MySQL Replication 新功能介绍 北京万里开源软件有限公司 2011 年 8 月
  • 2.
    万里开源和 MySQL -开源软件解决方案和技术服务提供商,推广使用开放源代码 的 LAMP 架构。 - 2006 年携手 MySQL AB 共建 MySQL 中国研发中心, 先后在 MySQL Cluster 和 Replication 功能上进行合作开发。
  • 3.
    MySQL 5.5 Replication 新功能和改进 - Semi-synchronous Replication - Replication Heartbeat - Automatic Relay Log Recovery - Replication Per Server Filtering - Replication Slave Side Data Type Conversions 参考 - http://blogs.oracle.com/mysql/entry/mysql_55_whats_new_in_replication - http://dev.mysql.com/doc/refman/5.5/en/replication.html - https://www.mysql.com/news-and-events/on-demand-webinars/display-od-572.html
  • 4.
    Semi-Synchronous Replication 目标- 当 COMMIT 语句成功返回后,该事务的所有日志已经被同步到了 Slave 上 - 如果这时 Master 发生故障,用户能从 Slave 上看到所有在 Master 看到的数据 实现方法 - 等待应答机制 - Master 在事务提交后,将等待至少一个 slave 的应答,此应答意味着整个事务的 日志已经复制到 了 slave 上 - Slave 在一个事务的所有 binary log 都写入 relay log 并刷新到磁盘后, 就立刻应答 Master - Binary Log Event 前添加了一个 Semi-Sync Header. 有是否应答的标志 位。 COMMIT,ROLLBACK, DDL - 应答内容为 master_log_file 和 master_log_pos
  • 5.
    Semi-Synchronous Replication Master上 COMMIT 返回后的两种含义 - 得到了 Slave 的响应,数据已经复制到了 Slave 上 - 等待超时, 数据没有复制到 Slave 上 . 转变为异步方 式。 Master 上的操作不能回滚
  • 6.
    MySQL 5.6 Replication 新功能和改进 - Multi-Threaded Slaves - Crash-Safe - Time-Delayed Replication - Informational Log Events - Optimized Row-Based Replication - Replication Checksums - Server UUIDs - Binlog API - Binlog Group Commit - Remote Binlog Back-up
  • 7.
    Crash-Safe On Masterbinlog.index 的容错 - 备份 binlog.index 文件 Binary Log 和 Master 数据的一致性 - 事务日志已经完整写入 Binary Log, 但是未提交 利用 xid Events, 恢复这些事务 - 事务日志未完整写入,也未提交 从 Binary Log 中删除不完整事务的日志
  • 8.
    Crash-Safe On Slaveslave-relay-bin.index 的容错 - 备份 slave-relay-bin.index 文件 master.info, relay-log.info 和 Slave 数据的一致性 - master.info 和 relay-log.info 存入系统表,并可修改引擎类型 slave_master_info, slave_relay_log_info 。 - 对这两个表的操作,包含在正在执行的事务中 Round-Robin Multi-Source Replication in Pure SQL - http://mysqlmusings.blogspot.com/2011/04/round-robin-multi-source-in-pure-sql.html 参考 - http://mysqlmusings.blogspot.com/2011/04/crash-safe-replication.html
  • 9.
    Time-Delayed Replication Slave滞后 Master 一定时间后再执行 Binary Log - CHANGE MASTER TO MASTER_DELAY = N; 目的 - 阻止用户在 Master 上的错误扩散到 Slave 上 - 检测一段时间以前的数据库系统的状况 - 测试目的 参考 - http://dev.mysql.com/doc/refman/5.6/en/replication-delayed.html
  • 10.
    Informational Log EventsInformational Log Event 是一个新的 Binary Log Event 族 . Master 可以通过这些 Events 将额外的信息发送到 Slave 。 - 不包含任何数据,不影响 Slave 上的数据。 - 只包含一些信息 , 这些信息可以被 mysqlbinlog, SHOW BINLOG EVENTS 打印出来。 - 主要用于调试 - Event Header 中设置 LOG_EVENT_IGNORABLE_F 标志
  • 11.
    Informational Log EventsRows Query Log Event - 在 Row 模式下,记录生成 Rows Log Events 的语句 - --binlog_rows_query_log_events 参考 - http://d2-systems.blogspot.com/2011/04/mysql-562-dm-binlog-informational.html
  • 12.
    Remote Binlog Back-upmysqlbinlog - --raw - --read-from-remote-server - --stop-never 参考 - http://dev.mysql.com/doc/refman/5.6/en/mysqlbinlog-backup.html
  • 13.
    Multi-Threaded Slaves Multi-ThreadedSlaves 实现了多个 SQL Threads 并发的执行不同的事务 Slave 的组成 - 1 个 I/O Thread - 1 个 SQL Coordinator Thread 分发 Binary log Events 到不同的 Worker Threads - N 个 SQL Worker Threads 执行 Binary log Events
  • 14.
    Multi-Threaded Slaves 限制- Database 级别的并发,两个事务修改了同一个 database 中的表,则要顺序执行。 参考 - http://d2-systems.blogspot.com/2011/04/mysql-56x-feature-preview-multi.html - http://d2-systems.blogspot.com/2011/07/update-on-multi-threaded-slave.html
  • 15.
    Optimized Row-Based Replication在 row 模式下,复制数据时,只复制必要的字段,而 不复制整行数据。减少 Binary Log 占用的空间和网络 传输时间。 Variable binlog-row-image - full - noblob - minimal
  • 16.
    Optimized Row-Based ReplicationBefore Row - 只复制主键字段或非空唯一键字段 After Row - 对于 UPDATE ,只复制被修改的字段 - 对于 INSERT ,复制所有字段 参考 - http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary- log.html#sysvar_binlog_row_image - http://d2-systems.blogspot.com/2011/04/mysql-562-dm-optimized-row-based.html
  • 17.
  • 18.

Editor's Notes

  • #2 MySQL Network corporate presentation Hide or unhide slides for customization