16

我已经设置了 mysql 参数 innodb_flush_log_at_trx_commit=0。这意味着 mysql 每秒将事务刷新到 HDD 1 次。如果 mysql 会因为这个刷新失败(因为断电),我会从这些事务中丢失我的数据,这是真的吗?或者mysql会在每次事务后将它们保存在数据文件(ibdata1)中,而不考虑binlog刷新?

谢谢。

4

2 回答 2

18

二进制日志包含描述数据库更改的“事件”,例如表创建操作或表数据更改。它还包含可能已进行更改的语句的事件(例如,不匹配任何行的 DELETE),除非使用基于行的日志记录。二进制日志还包含有关每条语句使用更新数据多长时间的信息。二进制日志有两个重要用途:

  1. 对于复制,主复制服务器上的二进制日志提供了要发送到辅助服务器的数据更改记录。主服务器将其二进制日志中包含的事件发送到其辅助服务器,辅助服务器执行这些事件以进行与主服务器相同的数据更改。
  2. 某些数据恢复操作需要使用二进制日志。恢复备份后,将重新执行备份后记录的二进制日志中的事件。这些事件使数据库从备份点开始更新

二进制日志不用于 SELECT 或 SHOW 等不修改数据的语句。 https://dev.mysql.com/doc/refman/8.0/en/binary-log.html

于 2019-06-18T08:13:51.907 回答
1

是 innodb_flush_log_at_trx_commit 的 MySQL 参考手册中的条目。您可能会丢失值设置为 0 的交易的最后一秒。

请注意,binlog 实际上是独立于 innodb 并用于所有存储引擎的不同的东西。是 MySQL 参考手册中关于二进制日志的章节。

于 2009-09-02T08:31:46.243 回答