mysql 主从复制架构简述

mysql 主从复制架构简述

  • 1 简述
  • 2 架构模式图
  • 3 功能优点
  • 4 主从复制原理
  • 5 重点参数

1 简述

    MySql 主从复制,通过将一台主机的数据复制到其他一台或多台主机上,并重新应用日志(relay log) 中的SQL语句来实现复制功能,它是构建数据库高可用集群架构的基础。
MySql 支持单向、双向、链式级联、异步复制,根据版本的更新又增加了半同步复制(5.5)、GTID 复制(5.6)、多源复制(5.7)、并行复制(5.7)、loss-less 复制(5.7)。

2 架构模式图

常见的主从复制模式有单向主从模式、双向主从模式、级联主从模式、一主多从模式、多主一从模式五种。如图:
mysql 主从复制架构简述_第1张图片

3 功能优点

MySql 的主从复制功能会给我们业务环境带来什么样的好处呢?

1.利用MySql的主从复制功能,线上环境可以实时灾备,让从库随时接管有故障的主库。
2.做读写分离,可以让从库提供查询服务,分担主库的读压力。
3.让从库做一些特殊SQL的统计任务等。
4.可以利用从库实现MySql平滑的版本升级操作。

4 主从复制原理

为什么要了解原理?

清楚的理解明白主从复制原理,在工作事项处理中有助于我们排查复制故障,在交流中也能让我们清晰的表达
自己的技术水准。

参与复制过程的线程

1.主服务器有一个工作线程 I/O dump thread;
2.从服务器有两个工作线程,一个是 I/O thread,另一个是  SQL thread。 

复制过程

主库把外界接收的SQL请求记录到自己的 binlog 日志中,从库的 I/O thread 去请求主库的 binlog 日志,
并将得到的 binlog 日志写到自己的 Relay log (中继日志)文件中。然后在从库上重做应用中继日志中的SQL
语句。
主库通过  I/O dump thread 给从库 I/O thread 传送 binlog 日志。

如图:
mysql 主从复制架构简述_第2张图片

5 重点参数

  1. 【log-bin】 搭建主从复制,必须开启二进制日志。样例:log-bin=/var/lib/mysql/bin-log。
  2. 【server-id】 MySql 在同一组主从结构中的唯一标识(主从服务器上该参数不能相同)。例子: server-id=13201。
  3. 【server-uuid】 从MySql5.6开始有了这个参数,在数据库启动过程中自动生成,每台机器的server-uuid是不一样的。uuid 存放在数据目录的 auto.cnf 文件下。
  4. 【read_only】 设置从库为只读状态,避免在从库上进行写操作。(对超级管理员权限帐号没有效果,但是在5.7版本之后新增了一个 super_read_only 参数,开启该参数,超级管理员也没有权限进行写入操作。) 例如:read_only=on。
  5. 【binlog_format】 二进制日志格式,必须使用 row 模式。
  6. 【log_slave_updates】 作用是将从 master 服务器上获取数据变更的信息记录到从服务器的二进制日志文件中。
  7. 【binlog_error_action】 该参数控制当不能写 binlog 文件时,MySql server 将会怎么样。(该参数为5.7之后新增,有 ABORT_SERVER 和 IGNORE_ERROR 两个值。ABORT_SERVER 代表会使 MySql server 在写binlog 遇到磁盘满或者文件系统不可写入时退出;而 IGNORE_ERROR 则代表如果binlog 无法写入时,MySql server 会在错误日志记录错误,并且还会强制关闭 binlog功能。这样会影响从库获取主库上 binlog 的过程,从而导致数据不一致。MySql5.7.7 之后,默认使用 binlog_error_action=ABORT_SERVER 。)
  8. 【binlog-do-db】 使用该参数可选择性复制数据库(在主库上使用),如果binlog-do-db=zs,意味着除了 zs 库,其他库都不复制。建议大家不要使用该参数,尽量保证复制的过滤规则不在主库上面添加。
  9. 【binlog-ignore-db】 该参数就是忽略某个库的复制。如 binlog-ignore-db=zs,意味着除了zs库,其他库走复制。
  10. 【gtid_mode】 决定 gtid 模式是否开启。使用 gtid 模式,设置 gtid_mode=on。
  11. 【enforce-gtid-consistency】 使用 GTID 复制模式时,要开启该参数,用来保证 GTID 的一致性。设置 enforce-gtid-consistency=on。
  12. 【gtid_next】 该参数是 session 级别的变量,下一个 gtid 。默认是 AUTOMATIC。
  13. 【gtid_purged】 丢弃掉的 GTID。
  14. 【relay_log】 记录从库的 I/O thread 从主库读取而来的 binlog 内容。
  15. 【replicate_do_table】 只复制指定的表,在从库上使用。
  16. 【replicate_ignore_table】 不复制指定的表,在从库上使用。
  17. 【replicate_do_db】 只复制指定的库,在从库上使用。
  18. 【replicate_ignore_db】 不复制指定的库,在从库上使用。
  19. 【replicate-wild-do-table】 使用通配符复制指定的表,如复制 zs 库下的 tt 开头的表,–replicate-wild-do-table=zs.tt%。
  20. 【replicate-wild-ignore-table】 使用通配符不复制指定的表。
  21. 【master_info_repository】 把 master.info (主从状态,配置信息) 记录下来,默认记录到 file 里,建议使用表纪录。如:master_info_repository=table。
  22. 【relay_log_info_repository】 sql thread 应用二进制日志的内容,并将 binlog 应用到的位置记录到 relay.info,默认记录到 file 里,建议使用表记录。例如:relay_log_info_repository=table。
  23. 【 relay_log_recovery】 为了让从库是 crash safe 的,必须要设置 relay_log_recovery=1。该参数的含义是:当从库发生崩溃或者重启时,它会把那些未执行完的中继日志删除,并会向主库重新获取binlog,再次生成 relay_log来完成中继日志的恢复。建议在从库上开启 relay_log_recovery参数,默认情况下是关闭的。
  24. 【relay_log_purge】 清除已经执行过的 relay log。建议在从库开启该参数。
  25. 【slave_net_timeout】 该参数是设置在多少秒如果没收到主库传来的 binlog 之后,从库认为是网络超时,从库 I/O thread 会重新连接主库。该值从 MySql 5.7.7 开始默认为 60s。
  26. 【slave_parallel_type】 该参数是从 MySql 5.7.2 引入的,有两个值,一个是 DATABASE,一个是 LOGICAL_CLOCK。在 MySql 5.7 中引入了基于组提交的并行复制。通过设置参数 slave_parallel_work>0 并且 slave_parallel_type=‘LOGICAL_CLOCK’ 实现。
  27. 【slave_parallel_work】 设置多线程来并发执行 relay log 中的主库提交的事务,最大值为 1024 。

你可能感兴趣的:(Mysql,mysql,数据库,linux)