MySQL主从同步原理讲解,推荐收藏
1。 MySQL主从同步实现方法
MySQL主从同步是基于bin log实现的,bin log记录了原始的SQL语句。
Bin Log可以通过 binlog_format 配置参数指定三种日志格式。
参数值 | 含义 |
---|---|
说明 | 记录原始SQL语句导致更新时间与原始数据库不一致。 例如 update_time=now() |
Row | 记录每行数据的变化,保证数据与原数据库一致。缺点是数据量大。 |
Mixed | Statement和Row的混合模式默认使用Statement模式。当日期和函数相关时,采用Row模式,既减少了数据量,又保证了数据的一致性。 |
常见的主从同步架构有一主多从、双主多从等。
2。 MySQL主从同步的作用
- 读写分离,提高数据库性能
- 灾难恢复,当主服务器不可用时,从服务器提供服务,提高可用性
- 冗余备份,主服务器数据和如果发生损坏或丢失,从服务器保留备份,从数据库只负责灾难恢复。和冗余备份。
读写分离时,主库负责写请求,从库负责读请求,这样可以提高数据库性能。
双主多从架构:
一般主库1负责所有读写请求,主库2不对外提供服务,仅用于容灾。
相比一主多从架构,双主多从架构可以减少停机时间,更快地将数据库恢复到可用状态。
3。主动同步原理
- 主库数据发生变化时,写入本地bin日志文件
- 从库IO线程发起转储主库bin日志文件的请求
- 主库IO线程打印bin日志文件到从库
- 从库IO线程将bin日志内容写入本地中继日志文件
- 从库读取中继日志文件内容SQL -Thread
- 重新执行来自库SQL线程的SQL语句? Seconds_Behind_Master表示延迟秒数。
主从同步延迟的原因有哪些?
- 从数据库机性能较差。主数据库负责所有的读写请求。从库仅用于备份。使用性能差的机器,执行时间自然会慢一些。
- 从库压力更大。读写分离后,主库负责写请求,从库负责读请求。互联网应用一般读请求较多,因此库的读压力较大,占用CPU资源较多。
- 网络延迟 主库向从库发送bin日志文件时,可能会出现网络延迟,也可能导致从库数据跟不上。
- 主数据库事务量较大。如果主库上有一个大事务,需要5分钟才能执行,则bin日志文件会发送到从库。从库也至少需要5分钟才能执行,所以此时从库有5分钟的延迟。 。
主从同步延迟的解决方案?
- 如果从库机器性能较差,请将从库更换为与主库同规格的机器。
- 从库压力更大。构建多个从库,分担读请求负载。
- 如有网络延迟,请联系运维或者云服务商来解决。
- 如果主库有大事务,应该拆分成小事务来执行。大事务不仅会造成从库延迟,还会造成死锁,降低数据库并发性能,所以尽量少用大事务。 ?意味着开启4个复制线程。 ?客户端返回成功。
- 半同步复制在至少一个从库执行完成后,向客户端返回成功。
- 异步复制主库执行完毕后,无论从库是否执行完毕,都会立即返回成功。
如果数据安全性要求不是太高,可以将同步模式改为半同步复制或异步复制。
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。
知识点总结:
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。