如何从嵌入式设备上的 MySQL 数据库损坏中恢复?
How to recover from MySQL database corruption on embedded device?
设置
- 嵌入式设备运行Linux
- MySQL 数据库存储在闪存上(使用 InnoDB 存储引擎)
- 通过 PoE 或通过 "electrical grid"
供电
- 设备没有 on/off-switch 比如一个 IP phone,在断开电源
之前,没有人可以也不会关闭系统
问题
- 当断电或在糟糕的时刻断开连接时(即当数据库更改正在持久化时),数据库可能已损坏。通常数据库可以恢复 - 有时不能。
- 闪存相当小,因此频繁 运行 完整备份(例如每小时一次)会很快耗尽存储空间。
目标
如果数据库损坏,我希望系统自动恢复。应尽可能避免必须手动恢复数据库(但可以作为最后的手段,这已经实施)。
研究思路找不到详细的资料。大多数情况下,我找到了如何尽可能好地防止数据丢失的建议。我还发现了非常一般的建议,例如重复数据存储、错误检测和更正,...
但我的问题是怎么办如果数据损坏确实发生了。
想法
- 将数据库复制到另一个数据库:如果主数据库损坏,自动回退(替换为)复制。
- 当用户下次登录时(管理界面)向她显示必须恢复数据库并且可能存在数据丢失(可能与数据丢失的时间范围有关)。此外,问题可以通过状态 LED 以某种方式发出信号。
- 缺点:需要两倍以上的存储空间space
- 优点:尽可能少的额外写入。
问题
- 这是一种有效的方法还是此过程中存在重大缺陷?
- 有没有我可以申请的"better practice"?那是哪个?
不是问题的直接答案,而是explains/removes根本原因:
MySQL 5.1 服务器的系统表存储在 - 并且必须存储在 - MyISAM 中。这使它们在断电时变得脆弱。
解决方案:迁移到更高的 MySQL/MariaDB 版本
有关详细信息,另请参阅
设置
- 嵌入式设备运行Linux
- MySQL 数据库存储在闪存上(使用 InnoDB 存储引擎)
- 通过 PoE 或通过 "electrical grid" 供电
- 设备没有 on/off-switch 比如一个 IP phone,在断开电源 之前,没有人可以也不会关闭系统
问题
- 当断电或在糟糕的时刻断开连接时(即当数据库更改正在持久化时),数据库可能已损坏。通常数据库可以恢复 - 有时不能。
- 闪存相当小,因此频繁 运行 完整备份(例如每小时一次)会很快耗尽存储空间。
目标
如果数据库损坏,我希望系统自动恢复。应尽可能避免必须手动恢复数据库(但可以作为最后的手段,这已经实施)。
研究思路找不到详细的资料。大多数情况下,我找到了如何尽可能好地防止数据丢失的建议。我还发现了非常一般的建议,例如重复数据存储、错误检测和更正,...
但我的问题是怎么办如果数据损坏确实发生了。
想法
- 将数据库复制到另一个数据库:如果主数据库损坏,自动回退(替换为)复制。
- 当用户下次登录时(管理界面)向她显示必须恢复数据库并且可能存在数据丢失(可能与数据丢失的时间范围有关)。此外,问题可以通过状态 LED 以某种方式发出信号。
- 缺点:需要两倍以上的存储空间space
- 优点:尽可能少的额外写入。
问题
- 这是一种有效的方法还是此过程中存在重大缺陷?
- 有没有我可以申请的"better practice"?那是哪个?
不是问题的直接答案,而是explains/removes根本原因:
MySQL 5.1 服务器的系统表存储在 - 并且必须存储在 - MyISAM 中。这使它们在断电时变得脆弱。
解决方案:迁移到更高的 MySQL/MariaDB 版本
有关详细信息,另请参阅