我们的生产MyISAM数据库中有一个损坏的MySQL表。有没有一种方法可以修复这个表而不锁定它?
我们正在考虑使用类似于Facebook的在线模式更改或Percona的pt-在线模式更改的方法。这样做的目的是:(1)复制表;(2)监视对原始使用触发器的更改;(3)修复副本;(4)最后,重命名已修复的表和原始表。
这样的东西会起作用吗?还是有另一种不停机修复生产数据库中损坏的表的推荐技术?
发布于 2012-11-30 23:41:05
这可能会奏效--这取决于进取心的性质--但你可能需要采取另一种策略。但是,您还没有说明损坏的本质,也没有说明运行在哪个OS/文件系统上。
IIRC,你提到的任何一种工具都支持“修复表.”语法。就我个人而言,因为我用PHP编程,所以我会考虑对OSC进行黑客攻击,但是如果您的技能是用Perl编写的,那么percona可能是一个更好的起点。
您需要将克隆的操作更改为“修复表.”然后,在剪切之前退出,以检查结果数据集是否足够完整,这样您就可以验证当您再次真正地尝试操作时,操作是否会成功。
如果您在处理过程中丢失数据,那么您可能会更幸运地获取数据文件的文件系统快照,将其复制到独立的DB安装中,并针对文件映像运行myisamchk --这意味着您需要自己对更改进行滚动处理--在这种情况下,可能更简单的做法是在其他地方恢复备份(可能将绑定日志前滚到离活动系统更近的地方)重命名该表,将其导出到原始DBMS中,然后在切换表之前将更改前滚。
https://dba.stackexchange.com/questions/29652
复制相似问题