Code前端首页关于Code前端联系我们

MySQL主从同步原理讲解,推荐收藏

terry 2年前 (2023-09-26) 阅读数 46 #数据库

1。 MySQL主从同步实现方法

MySQL主从同步是基于bin log实现的,bin log记录了原始的SQL语句。

Bin Log可以通过 binlog_format 配置参数指定三种日志格式。

参数值含义
说明记录原始SQL语句导致更新时间与原始数据库不一致。
例如 update_time=now()
Row 记录每行数据的变化,保证数据与原数据库一致。缺点是数据量大。
MixedStatement和Row的混合模式默认使用Statement模式。当日期和函数相关时,采用Row模式,既减少了数据量,又保证了数据的一致性。

常见的主从同步架构有一主多从、双主多从等。

MySQL主从同步原理说明,推荐收藏

MySQL主从同步原理说明,推荐收藏

2。 MySQL主从同步的作用

  1. 读写分离,提高数据库性能
  2. 灾难恢复,当主服务器不可用时,从服务器提供服务,提高可用性
  3. 冗余备份,主服务器数据和如果发生损坏或丢失,从服务器保留备份,从数据库只负责灾难恢复。和冗余备份。

    读写分离时,主库负责写请求,从库负责读请求,这样可以提高数据库性能。

    双主多从架构:

    一般主库1负责所有读写请求,主库2不对外提供服务,仅用于容灾。

    相比一主多从架构,双主多从架构可以减少停机时间,更快地将数据库恢复到可用状态。

    3。主动同步原理

    MySQL主从同步原理说明,推荐收藏

    1. 主库数据发生变化时,写入本地bin日志文件
    2. 从库IO线程发起转储主库bin日志文件的请求
    3. 主库IO线程打印bin日志文件到从库
    4. 从库IO线程将bin日志内容写入本地中继日志文件
    5. 从库读取中继日志文件内容SQL -Thread
    6. 重新执行来自库SQL线程的SQL语句? Seconds_Behind_Master表示延迟秒数。

      MySQL主从同步原理说明,推荐收藏

      主从同步延迟的原因有哪些?

      1. 从数据库机性能较差。主数据库负责所有的读写请求。从库仅用于备份。使用性能差的机器,执行时间自然会慢一些。
      2. 从库压力更大。读写分离后,主库负责写请求,从库负责读请求。互联网应用一般读请求较多,因此库的读压力较大,占用CPU资源较多。
      3. 网络延迟 主库向从库发送bin日志文件时,可能会出现网络延迟,也可能导致从库数据跟不上。
      4. 主数据库事务量较大。如果主库上有一个大事务,需要5分钟才能执行,则bin日志文件会发送到从库。从库也至少需要5分钟才能执行,所以此时从库有5分钟的延迟。 。

      主从同步延迟的解决方案?

      1. 如果从库机器性能较差,请将从库更换为与主库同规格的机器。
      2. 从库压力更大。构建多个从库,分担读请求负载。
      3. 如有网络延迟,请联系运维或者云服务商来解决。
      4. 如果主库有大事务,应该拆分成小事务来执行。大事务不仅会造成从库延迟,还会造成死锁,降低数据库并发性能,所以尽量少用大事务。 ?意味着开启4个复制线程。 ?客户端返回成功。
      5. 半同步复制在至少一个从库执行完成后,向客户端返回成功。
      6. 异步复制主库执行完毕后,无论从库是否执行完毕,都会立即返回成功。

      如果数据安全性要求不是太高,可以将同步模式改为半同步复制或异步复制。

      3。更改slave bin log配置

      更改sync_binlog配置:

      sync_binlog=0,表示写入binlog不会立即刷新磁盘,由系统决定何时刷新磁盘。

      sync_binlog=1,每次写入binlog都会刷新磁盘,安全性高,但性能较差。

      sync_binlog=N,刷新磁盘前写入N次binlog。

      从库没有那么高的数据安全要求,所以可以设置sync_binlog=0。

      更改innodb_flush_log_at_trx_commit配置:

      innodb_flush_log_at_trx_commit=0,每秒将事务日志刷新到磁盘。

      innodb_flush_log_at_trx_commit=1,每个事务都会刷新到磁盘。

      innodb_flush_log_at_trx_commit=2,每个事务不主动刷新磁盘,由系统决定何时刷新磁盘。

      从库没有那么高的数据安全要求,所以可以设置innodb_flush_log_at_trx_commit=2。

      知识点总结:

      MySQL主从同步原理说明,推荐收藏

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门