【innodb_flush_log_at_trx_commit】
innodb_flush_log_at_trx_commit = 0 :每秒写入日志缓存(OS缓存),并且刷新(OS缓存)到磁盘。MySQL进程或者OS挂了丢失1秒的事务数据。
innodb_flush_log_at_trx_commit = 1 :默认值,每次事务提交时写入日志缓(OS缓存)存并刷新(OS缓存)到磁盘。MySQL进程或者OS挂了丢失1个未完成的事务数据。
innodb_flush_log_at_trx_commit = 2 :每次事务提交时写入日志缓存(OS缓存),每秒刷新(OS缓存)到磁盘。MySQL进程挂了丢失1个未完成的事务数据;OS挂了丢失1秒的事务数据。
【innodb_flush_log_at_timeout】
上面提到的是每秒刷新一次,日志刷新频率由 innodb_flush_log_at_timeout 控制,允许您将日志刷新频率设置为N秒(其中N为1 ... 2700,默认值为1)。但是,任何mysqld进程崩溃都可以丢失最多N秒的事务。innodb_flush_log_at_timeout 的设置只针对 innodb_flush_log_at_trx_commit 为 0/2 时起作用。
【sync_binlog】
上面提到的是每个事务刷新一次,系统变量 sync_binlog 可以设置每 N 个事务刷新一次,但是,任何mysqld进程崩溃都可以丢失最多N秒的事务。
sync_binlog=0 :禁用MySQL服务器将二进制日志同步到磁盘,MySQL依赖于操作系统将二进制日志刷新到磁盘。此性能最好。
sync_binlog=1 :每1次事务提交之后,MySQL将进行一次fsync同步binlog_cache中的数据写入磁盘。此最安全。
sync_binlog=N :每N次事务提交之后,MySQL将进行一次fsync同步binlog_cache中的数据写入磁盘。
为了保证事务的一致性和持久性,应设置:
sync_binlog=1
innodb_flush_log_at_trx_commit=1
参考:MySQL安全之sync_binlog&innodb_flush_log_at_trx_commit参数