设置 innodb_flush_log_at_trx_commit=0 是否安全?

设置 innodb_flush_log_at_trx_commit=0 是否安全?

我有一台服务器(Dell PE2950),其RAID控制器上有一个由电池供电的写缓存。

在数据文件存储在 raid0 卷上的 mysql 服务器上设置 innodb_flush_log_at_trx_commit=0 是否安全?

如果卷是 raid1/5/10,答案会有所不同吗?

谢谢!

答案1

如果您担心丢失数据,那么它就不安全了。根据手册,事务可能已提交,但尚未写入磁盘 - 仅在内存中。这意味着 mysqld 崩溃或操作系统崩溃或电源故障可能会导致事务丢失。

在某些系统中,丢失交易可能没什么问题,只要交易完全丢失或完全保留即可。在这种情况下,您可以关闭此设置。

电池供电的 RAID 控制器的意义在于控制器上的安全写入缓存。如果控制器缓存写入但断电,没有电池,则写入缓存中的数据将会丢失。但是,MySQL 已经期望这些数据安全地存储在磁盘上。因此,电池允许在 RAID 控制器中安全使用写入缓存。通常,控制器有一个设置,如果电池电量过低,则自动禁用写入缓存。

RAID 级别并不直接相关。如果数据在磁盘上,它就是在磁盘上。如果断电,它会很安全。RAID 级别真正重要的地方是磁盘坏了——一种完全不同的故障模式。如果是 RAID0,显然会立即丢失所有数据。如果是 RAID5,您可以继续使用,但性能会受到很大影响。使用 RAID1/10,您可以继续使用,但性能会受到很小的影响。

但是,不要将 RAID 误认为是备份。数据库服务器有几十种故障模式,而 RAID 只能处理其中一种:磁盘故障。您的文件系统可能会崩溃,您可能会意外删除数据,您的数据文件可能会因一个不为人知的 MySQL 错误而损坏。因此,不要忘记使用 备份重要数据mysqldump。除非 MySQL 已停止,否则切勿复制数据文件,因为它们可能不一致。

答案2

为了安全和性能,您应该有 innodb_flush_log_at_trx_commit=1 和 RAID 10。

干杯

相关内容