我有 DB InnoDb innodb_db_1
。我已经打开 innodb_file_per_table。
如果我去 var/lib/mysql/innodb_db_1/
我会找到文件 table_name.ibd, table_name.frm, db.opt
。
现在,我正在尝试将这些文件复制到另一个数据库,例如复制到 innodb_db_2
( var/lib/mysql/innodb_db_2/
) 但什么也没发生。
但是如果我的数据库是 MyIsam,我可以以这种方式复制并且一切正常。
通过复制InnoDb DB的文件来移动DB有什么建议?
最佳答案
即使您使用 file-per-table,这些表也会在/var/lib/mysql/ibdata1 中保留一些数据和元数据。所以你不能只是将 .ibd 文件移动到一个新的 MySQL 实例。
您必须备份和恢复您的数据库。您可以使用:
回复您的评论:
不,您不能只复制 .ibd 文件。 您无法关闭对 ibdata1 的要求。这个文件包括一个数据字典,你可以把它想象成一本书的目录。它告诉 InnoDB 你有哪些表,以及它们驻留在哪个物理文件中。
如果您只是将 .ibd 文件移动到另一个 MySQL 实例中,则不会将其添加到该实例的数据字典中。所以 InnoDB 不知道查看新文件,或者它与哪个逻辑表一起。
如果您需要解决方法,您可以
ALTER TABLE mytable ENGINE=MyISAM
,将该文件及其 .frm 移动到另一个实例,然后 ALTER TABLE mytable ENGINE=InnoDB
将其更改回来。请记住在移动 MyISAM 文件之前使用 FLUSH TABLES WITH READ LOCK
。但这些步骤并不适合初学者。除非您知道自己在做什么,否则使用备份和还原方法会安全得多。我试图为你省去一些悲伤。
关于mysql - 移动 InnoDb 数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20237058/