56. MySQL 复制方式对比、复制参数

AI 概述
1. 复制方式对比1.1 异步复制1.2 半同步复制1.3 增强半同步复制2. 重要的复制参数2.1 主库2.2 从库3. 小结 上两小节从实战的角度介绍了如何搭建异步复制和增强半同步复制,我想您肯定会有疑问,都是 MySQL 的主从复制,它们之间究竟有啥不同呢。本小节我们一起来学习 MySQL 复制方式的对比,以及相对比...
目录
文章目录隐藏
  1. 1. 复制方式对比
  2. 2. 重要的复制参数
  3. 3. 小结

上两小节从实战的角度介绍了如何搭建异步复制和增强半同步复制,我想您肯定会有疑问,都是 MySQL 的主从复制,它们之间究竟有啥不同呢。本小节我们一起来学习 MySQL 复制方式的对比,以及相对比较重要的复制参数。

1. 复制方式对比

除了异步复制和增强半同步复制之外,介于它们之间其实还有一种复制方式,叫半同步复制,只是从 MySQL 5.7 开始,逐渐被增强半同步所替代。那么这三种复制方式之间有什么异同呢?请参考如下表格

异步复制 半同步复制 增强半同步复制
部署难度
维护难度
数据丢失 中低 极低
性能影响

1.1 异步复制

在传统的复制中,binlog 的复制是异步的,啥时候复制到从库,以及是否复制成功,MySQL 是不管的,存在丢失数据的风险:

1.2 半同步复制

半同步复制的执行步骤如下:

  1. SQL 解析,会话 T1(insert into t1 values(1000););
  2. 存储引擎处理;
  3. 写 binlog;
  4. 提交至存储;
  5. 等待从库成功接收 binlog 的返回信号;
  6. 反馈至客户端。

这种同步方式的最大缺点是会出现丢失数据的风险,在步骤 4 之后,主库出现会话 T2(select * from t1;),可以读取到 1000 这个值,但如果此时步骤 5 失败,从库是不能成功接收到 1000 这个值的,也就意味着表 t1 的 1000 在从库是丢失的。

1.3 增强半同步复制

增强半同步复制的执行步骤如下:

  1. SQL 解析,会话 T1(insert into t1 values(1000););
  2. 存储引擎处理;
  3. 写 binlog;
  4. 等待从库成功接收 binlog 的返回信号;
  5. 提交至存储;
  6. 反馈至客户端。

增强半同步复制,号称无损半同步复制。在步骤 3 之后,如果主库出现会话 T2(select * from t1;),是读取不到 1000 这个值的。如果步骤 4 失败,主从都一样,不能成功提交 1000 这个值,确保数据的一致性。

2. 重要的复制参数

2.1 主库

  • log-bin

binlog 文件名前缀,可以是全路径,不可以动态修改

log-bin = /mysql/3306/log
  • server-id

唯一区别 ID,同一个集群内不可重复,从 5.6 开始可以动态修改

推荐使用 ip+端口号,1013306
  • server-uuid

唯一区别 ID,同一个集群内不可重复,从 5.6 开始可以动态修改:

32 位的 GUID,文件路径/mysql/3306/auto.cn
  • log-bin-index

binlog 索引文件前缀,也可以是全路径,不可以动态修改

  • binlog_format

binlog 日志格式:statement、row、mixed 三种,可以动态修改

  • binlog_cache_size

binlog 写入的 buffer,推荐 1M-4M 就足够,可以动态修改

  • max_binlog_size

限制每个 binlog 的大小,默认是 1G,推荐 128M 或 256M,可以动态修改

  • expire_logs_days

表示多少天后自动删除 binlog,可以动态修改

2.2 从库

  • server-id:唯一区别 ID,同一个集群内不可重复,从 5.6 开始可以动态修改,推荐使用 ip+端口号,1013306;
  • server-uuid:唯一区别 ID,同一个集群内不可重复,从 5.6 开始可以动态修改;32 位的 GUID,文件路径/mysql/3306/auto.cn;
  • relay-log:relaylog 文件名前缀,可以是全路径,不可以动态修改;复制进程 io_thread 读取过来存到本地的日志;
  • relay-log-index:relaylog 索引文件前缀,也可以是全路径,不可以动态修改;
  • read-only:设置从库是否只读,但对 super 权限的用户不起作用,可以动态修改;
  • log-slave-updates:将 master 传输过来的变更操作,再次记录成本地 binlog,用于做二次复制,当做中继分发节点,不可以动态修改;
  • max_relay_log_size:限制每个 relaylog 的大小,推荐 128M 或 256M,可以动态修改。

3. 小结

本小节主要介绍了三种复制方式的异同点,以及一些比较重要的复制参数。

在实际应用场景中,MySQL 复制是使用最为广泛的,用来提高系统可用性、扩展性的设计手段,也是 MySQL 迅速流行的关键原因。一般来说,从 MySQL 5.7 开始,都推荐使用增强半同步的复制方式,基本可以实现数据 0 丢失。

以上关于56. MySQL 复制方式对比、复制参数的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 56. MySQL 复制方式对比、复制参数

发表回复