我有一台服务器(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。
干杯