MySQL高可用
- MMM,MHA
- 2016 Innodb Cluster
- 2020 Innodb ReplicaSet
sync_binlog sync_binlog是MySQL Binlog日志的重要参数,用于控制Binlog的更新策略,该参数的取值范围为0、1、N,通过对该参数的调优,可以提升数据库的性能和数据安全性:
- 当sync_binlog=0时,MySQL会在每次事务提交将binlog_cache中的数据更新至文件系统缓冲区,但不会进行持久化,而是依赖操作系统来调度数据刷入磁盘。
- 当sync_binlog=1时,MySQL会在每次事务提交,将binlog_cache中的数据更新到磁盘上,此时MySQL安全性较高,但是IO消耗也较高。
- 当sync_binlog=N时,MySQL会在每N组事务提交将数据更新到磁盘中。通过这种方式,可以在一定程度上平衡MySQL的性能和数据的安全性。如果N设置得比较大,可以提高系统的性能,但会降低数据的安全性。
innodb_flush_log_at_trx_commit innodb_flush_log_at_trx_commit是MySQL InnoDB存储引擎独有的参数,用于控制InnoDB的Redo log日志记录方式。通过调优该参数,可以提升数据库的性能和数据安全性。该参数的取值范围为0、1、2,不同的值代表MySQL数据库的Redo log不同的刷盘的方式:
- 当innodb_flush_log_at_trx_commit=0时,InnoDB会每秒钟将log buffer中的数据更新到磁盘中。每秒刷一次磁盘时,会至多丢失1s事务,若刷盘的频率有变化时,丢失的事务数也会随之变化。
- 当innodb_flush_log_at_trx_commit=1时,InnoDB将在每次事务提交时将log buffer的数据更新到文件系统os buffer中,并调用文件系统的fsync操作将数据缓存更新至磁盘中。此种方式下,数据库完全遵守ACID特性,安全性较高。
- 当innodb_flush_log_at_trx_commit=2时,InnoDB将在每次事务提交时将log buffer中的数据更新到文件系统缓存中,每秒钟将文件系统缓存中的数据更新到磁盘一次。每秒刷一次磁盘时,会至多丢失1s事务,若刷盘的频率有变化时,丢失的事务数也会随之变化。
综上所述,innodb_flush_log_at_trx_commit和sync_binlog参数需要根据具体的需求来设置:
- 在对数据安全性要求较高的场景下,建议将这两个参数设置为1。
- 在对实例性能要求较高的场景下,建议将这两个参数设置为0或者将innodb_flush_log_at_trx_commit设置为0,sync_binlog设置为N,以提高系统的性能,但需要注意可能会增加数据丢失的风险。
This post is licensed under CC BY 4.0 by the author.