面试题答案
一键面试innodb_flush_log_at_trx_commit = 0
- I/O行为:每秒将log buffer中的数据写入日志文件,并执行一次fsync操作将日志文件刷到磁盘。事务提交时,不进行任何日志写入磁盘的操作。
- 数据安全性:如果MySQL发生崩溃,可能会丢失最后1秒内提交事务的日志记录,存在数据丢失风险。
innodb_flush_log_at_trx_commit = 1
- I/O行为:每次事务提交时,都将log buffer中的数据写入日志文件,并执行fsync操作将日志文件刷到磁盘。
- 数据安全性:提供最高的数据安全性,崩溃恢复时不会丢失任何已提交事务的数据。但频繁的I/O操作可能会影响性能。
innodb_flush_log_at_trx_commit = 2
- I/O行为:每次事务提交时,将log buffer中的数据写入日志文件,但每隔1秒执行一次fsync操作将日志文件刷到磁盘。
- 数据安全性:比设置为0更安全,因为事务提交时日志已写入文件系统缓存。如果MySQL发生崩溃,不会丢失已提交事务的数据,但如果操作系统崩溃,可能会丢失最后1秒内的日志记录。