【发布时间】:2015-12-10 08:19:56
【问题描述】:
设置
- 运行 Linux 的嵌入式设备
- 存储在闪存上的 MySQL 数据库(使用 InnoDB 存储引擎)
- 通过 PoE 或“电网”供电
- 设备没有开/关开关,例如一部 IP 电话,没有人可以或不会在断开电源之前关闭系统
问题
- 当断电或在某个糟糕的时刻断开连接时(即,当数据库更改处于持久化过程中时),数据库可能已损坏。数据库通常可以恢复 - 有时不能。
- 闪存相当小,因此频繁运行完整备份(例如每小时)会过快耗尽存储空间。
目标
如果数据库损坏,我希望系统自动恢复。应该尽可能避免手动恢复数据库(但可以作为最后的手段,这已经实现了)。
研究想法我找不到太多详细信息。大多数情况下,我找到了如何尽可能防止数据丢失的建议。我还发现了非常一般的建议,例如重复数据存储、错误检测和纠正……
但我的问题是怎么办如果数据损坏实际上发生了。
想法
- 将数据库复制到另一个数据库:如果主数据库损坏,自动回退(替换为)复制。
- 当用户下次登录时(管理界面)向她显示必须恢复数据库并且可能存在数据丢失(可能与丢失数据的时间范围有关)。问题也可以通过状态 LED 以某种方式发出信号。
- 缺点:需要两倍以上的存储空间
- 优势:尽可能少的额外写入。
问题
- 这是一种有效的方法还是在这个过程中存在重大缺陷?
- 是否有我可以应用的“更好的做法”?那是哪个?
【问题讨论】:
-
我真的很喜欢这个平台上没有任何解释的匿名投票!这是史诗! --- 可以回答,不只是讨论。 -> 是的,涵盖程序员常用的软件工具 -> 是(MySQL),一个实用的、可回答的问题,是软件开发独有的 -> 是(我正在开发服务器,需要编写恢复策略)---
-
哇,又一次无缘无故投了反对票。可悲。
-
我猜是霸王和巨魔干的……
-
还是不明白投反对票...