MySQL数据库中丢失了一些文件。如何以适当的方式重新创建它?
问题是,MySQL数据库中的一个MYI和一个MYD文件被意外删除。唯一保存完好的文件是FRM one。整个数据库中只有一个表以这种方式损坏,所有其他表都正常,数据库工作正常,但带有已删除文件的表除外,该表显然无法访问 有一个纯SQL格式的完整数据库转储可用 问题是,如何以安全和适当的方式重新创建这些文件和表 我的第一个想法是从转储中提取完整的MySQL数据库中丢失了一些文件。如何以适当的方式重新创建它?,mysql,Mysql,问题是,MySQL数据库中的一个MYI和一个MYD文件被意外删除。唯一保存完好的文件是FRM one。整个数据库中只有一个表以这种方式损坏,所有其他表都正常,数据库工作正常,但带有已删除文件的表除外,该表显然无法访问 有一个纯SQL格式的完整数据库转储可用 问题是,如何以安全和适当的方式重新创建这些文件和表 我的第一个想法是从转储中提取完整的createtable命令,并在实时数据库上运行它。这并不容易,因为整个转储文件的容量超过10GB,所以其内容中的任何操作都非常痛苦。是的,我知道 SED并
createtable
命令,并在实时数据库上运行它。这并不容易,因为整个转储文件的容量超过10GB,所以其内容中的任何操作都非常痛苦。是的,我知道<代码> SED并知道如何使用它。但我认为这是最后的选择。
第二个也是当前的想法是在独立服务器上创建此数据库的副本,转储相关表,然后使用生成的SQL文件在生产服务器上再次创建表。我对MySQL管理任务没有太多经验(好吧,只是一些基本的任务),但是对我来说这个选项似乎是安全和合理的
提前感谢您的帮助。最简单的解决方案是复制您删除的表。mysqld可能仍然有一个打开的文件句柄来处理您删除的数据文件。在UNIX/Linux/OS X上,当某个进程仍然有一个打开的文件句柄时,文件并没有真正被删除 因此,您可以这样做:
mysql> CREATE TABLE mytable_copy LIKE mytable;
mysql> INSERT INTO mytable_copy SELECT * FROM mytable;
如果在删除文件后重新启动了MySQL服务器,则此操作将不起作用。如果服务器已关闭其数据文件的文件句柄,则此操作将不起作用。如果你在Windows上,我不知道
下一个最简单的解决方案是将现有10GB转储文件恢复到MySQL服务器的临时实例,如您所说。我会使用,但有些人会使用虚拟机,或者如果您使用的是AWS环境,请启动spot EC2实例或小型RDS实例
然后只转储所需的表:
mysqldump -h tempserver mydatabase mytable > mytable.sql
然后将其恢复到真实服务器
mysql -h realserver mydatabase < mytable.sql
mysql-h realserver mydatabase
(我省略了用户和密码选项,我更喜欢将它们放在
.my.cnf
中)最简单的解决方案是复制删除的表。mysqld可能仍然有一个打开的文件句柄来处理您删除的数据文件。在UNIX/Linux/OS X上,当某个进程仍然有一个打开的文件句柄时,文件并没有真正被删除
因此,您可以这样做:
mysql> CREATE TABLE mytable_copy LIKE mytable;
mysql> INSERT INTO mytable_copy SELECT * FROM mytable;
如果在删除文件后重新启动了MySQL服务器,则此操作将不起作用。如果服务器已关闭其数据文件的文件句柄,则此操作将不起作用。如果你在Windows上,我不知道
下一个最简单的解决方案是将现有10GB转储文件恢复到MySQL服务器的临时实例,如您所说。我会使用,但有些人会使用虚拟机,或者如果您使用的是AWS环境,请启动spot EC2实例或小型RDS实例
然后只转储所需的表:
mysqldump -h tempserver mydatabase mytable > mytable.sql
然后将其恢复到真实服务器
mysql -h realserver mydatabase < mytable.sql
mysql-h realserver mydatabase
(我省略了用户和密码选项,我更喜欢把它们放在
.my.cnf
中)是的,第二个选项会起作用,对我来说似乎是你最好的选项。它就像一个符咒。快速、轻松、优雅。谢谢你的支持。是的,第二种选择很有效,对我来说似乎是你最好的选择。它很有魅力。快速、轻松、优雅。感谢您的支持。尽管MySQL服务器没有停止,但第一个选项不幸没有起作用。OpenBSD,如果它有什么关系的话。但第二个解决方案很有魅力。快速、轻松、优雅。谢谢你的支持。是的,这只是一个机会。MySQL可能会不时自行关闭文件句柄。不幸的是,尽管MySQL服务器没有停止,但第一个选项不起作用。OpenBSD,如果它有什么关系的话。但第二个解决方案很有魅力。快速、轻松、优雅。谢谢你的支持。是的,这只是一个机会。MySQL可能会不时自行关闭文件句柄。