MySQL InnoDB 随机数据损坏:硬件还是软件错误?

MySQL InnoDB 随机数据损坏:硬件还是软件错误?

我是一个社交游戏的管理员,该游戏使用 MySQL(准确地说是 Percona 5.1.56)进行数据存储(所有表都为 InnoDB 类型)。游戏中有大约 200 万玩家,数据库大小约为 100Gb,并且还在逐渐增长。有几个表已经包含超过 5 亿条记录。

即使没有在单个足够强大的非虚拟化 Linux Debian 6 服务器(24 GB RAM、硬件 Adaptec RAID-10,带有几个只读从属服务器)上进行分片,游戏数据库也能非常顺利地运行。问题是 MySQL 时不时(一两个月一次)会崩溃,数据损坏如下:

 InnoDB: Database page corruption on disk or a failed InnoDB: file read of page XXXX.     
 InnoDB: You may have to recover from a backup.

从此类错误中恢复是一个非常痛苦的过程。通常需要将其中一个从服务器提升为新主服务器,将流量引导至该新主服务器并为该主服务器创建备份从服务器。有些停机时间会让玩家非常抓狂...

Percona 的人告诉我这是硬件的问题,一开始我也以为是硬件的问题,但在我更换了一些服务器我真的不知道该想什么。

MySQL 有可能破坏数据吗?我已经开始寻找替代方案(例如 PostgreSQL,或者像 Cassandra 这样的激进方案)。但我当然知道每个新产品都有自己的缺陷和怪癖,更不用说迁移成本了……

我正在拔掉我的头发(今天我又遇到了一次崩溃),所以如果你有什么想法,请分享......

答案1

我们已经运行 MySQL(以及过去的 Percona 版本)好几年了,数据库多达 3 亿行,有多个读取从属。我唯一见过的此类问题与硬件有关。最常见的是坏驱动器、坏驱动器控制器、坏 RAID 控制器。

您使用的是哪种存储?如果您使用的是商用硬盘,即使是在 RAID 配置中,您的 I/O 级别也会超过典型的 MTBF 率。

相关内容