概念
即数据库告诉我这次事务成功了,但当我下次读取数据时,却发现数据不正确。这就是数据丢失.
原因
看个场景, redo log丢失造成的主从不一致:bin-log写入所以从库能够执行事务。但主库中trx_prepare的日志没有被写入到ib_logifle中,导致主库不执行事务。这样就会出现主从不一致的情况—主库没执行事务,而从库执行。成的主从不一致
redo log 刷盘策略由 innodb_flush_log_at_trx_commit 参数控制:
0:每秒刷新一次
1:每次commit刷新一次(默认值,MySQL5.6)
2:每次commit都 write os cache,然后根据 innodb_flush_log_at_timeout 参数(默认为1s) flush diskmysql> show variables like '%innodb_flush_log_at_trx_commit%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1 |
+--------------------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%innodb_flush_log_at_timeout%';
&#