【问题标题】:How to recover from MySQL database corruption on embedded device?如何从嵌入式设备上的 MySQL 数据库损坏中恢复?
【发布时间】:2015-12-10 08:19:56
【问题描述】:

设置

  • 运行 Linux 的嵌入式设备
  • 存储在闪存上的 MySQL 数据库(使用 InnoDB 存储引擎)
  • 通过 PoE 或“电网”供电
  • 设备没有开/关开关,例如一部 IP 电话,没有人可以或不会在断开电源之前关闭系统

问题

  • 当断电或在某个糟糕的时刻断开连接时(即,当数据库更改处于持久化过程中时),数据库可能已损坏。数据库通常可以恢复 - 有时不能。
  • 闪存相当小,因此频繁运行完整备份(例如每小时)会过快耗尽存储空间。

目标

如果数据库损坏,我希望系统自动恢复。应该尽可能避免手动恢复数据库(但可以作为最后的手段,这已经实现了)。

研究想法我找不到太多详细信息。大多数情况下,我找到了如何尽可能防止数据丢失的建议。我还发现了非常一般的建议,例如重复数据存储、错误检测和纠正……

但我的问题是怎么办如果数据损坏实际上发生了。

想法

  • 将数据库复制到另一个数据库:如果主数据库损坏,自动回退(替换为)复制。
  • 当用户下次登录时(管理界面)向她显示必须恢复数据库并且可能存在数据丢失(可能与丢失数据的时间范围有关)。问题也可以通过状态 LED 以某种方式发出信号。
  • 缺点:需要两倍以上的存储空间
  • 优势:尽可能少的额外写入。

问题

  • 这是一种有效的方法还是在这个过程中存在重大缺陷?
  • 是否有我可以应用的“更好的做法”?那是哪个?

【问题讨论】:

  • 我真的很喜欢这个平台上没有任何解释的匿名投票!这是史诗! --- 可以回答,不只是讨论。 -> 是的,涵盖程序员常用的软件工具 -> 是(MySQL),一个实用的、可回答的问题,是软件开发独有的 -> 是(我正在开发服务器,需要编写恢复策略)---
  • 哇,又一次无缘无故投了反对票。可悲。
  • 我猜是霸王和巨魔干的……
  • 还是不明白投反对票...

标签: mysql database embedded


【解决方案1】:

不是对问题的直接回答,而是解释/消除根本原因的东西:

MySQL 5.1 服务器的系统表是使用 - 并且必须使用 - MyISAM 存储的。这使得它们在断电时变得脆弱。

解决方案:迁移到更高的 MySQL/MariaDB 版本

更多详情另见https://stackoverflow.com/a/34285574/3963625

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2019-04-06
    • 2013-08-08
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多