暂无图片
请问各位大佬,innodb_flush_log_at_trx_commit=1和sync_binlog=1为什么最多丢1秒钟数据?
我来答
分享
小岳
2024-12-31
请问各位大佬,innodb_flush_log_at_trx_commit=1和sync_binlog=1为什么最多丢1秒钟数据?

请问各位大佬,看网上说innodb_flush_log_at_trx_commit=1和sync_binlog=1最多丢1秒钟数据。请问为什么最多丢1秒钟数据?

谢谢!

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
shunwahⓂ️

innodb_flush_log_at_trx_commit=1表示每次事务提交时,都同步到磁盘:这种方式提供了最高的持久性保证,但可能会影响性能,因为每次提交都需要等待磁盘 I/O 完成。 也这意味着,即使MySQL服务器发生崩溃或意外断电,已经提交的事务的日志信息也会被安全地保存在磁盘上,从而保证了数据的持久性。如果设置为其他值(如0或2),则可能在某些情况下导致事务日志未能及时刷新到磁盘,从而增加数据丢失的风险。

其次,sync_binlog=1表示每次事务提交时,都会将MySQL的二进制日志(binlog)同步到磁盘。二进制日志是MySQL复制和增量备份的基础,确保了在发生故障时,可以通过二进制日志进行数据恢复。但每次提交都同步 binlog:同样提供了较高的持久性,也可能影响性能。

基于这两个参数的设置以及MySQL事务处理机制的连续性来保证的。在正常情况下,这两个设置可以确保数据的高持久性和可靠性。因此,选择合适的参数值需要根据具体的应用场景、性能需求和对数据安全性的要求进行权衡。

如果性能要求高,不建议设置。

如果对数据完整性有极高要求,并且可以接受一定的性能损失,那么保持这两个参数为 1 是推荐的做法。

暂无图片 评论
暂无图片 有用 4
龙舌兰地落🌏

这个说法不准确。
正确的说法是双1最多丢失1个事务的数据。
网上说的最多丢1秒钟数据可能是对比innodb_flush_log_at_trx_commit设置为0或2的情况来说的。

暂无图片 评论
暂无图片 有用 3
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏