我有DB InnoDb innodb_db_1。我打开了innodb_file_per_table。
如果我去var/lib/mysql/innodb_db_1/,我会找到table_name.ibd, table_name.frm, db.opt文件。
现在,我试图将这些文件复制到另一个DB,例如innodb_db_2(var/lib/mysql/innodb_db_2/),但什么也没有发生。
但是如果我的DB是MyIsam,我可以以这样的方式复制,一切都很好。
通过复制InnoDb DB的文件来移动DB有什么建议?
发布于 2014-01-04 07:19:05
即使在使用每个表的文件时,这些表仍将一些数据和元数据保存在/var/lib/mysql/ibdata1 1中。因此,您不能只将.ibd文件移动到一个新的MySQL实例。
您将不得不备份和恢复数据库。您可以使用:
关于你的评论:
不,不能只复制.ibd文件。不能关闭对ibdata1的要求。除其他外,这个文件还包括一个数据字典,您可以把它想象成一本书的目录。它告诉InnoDB您有哪些表,以及它们驻留在哪个物理文件中。
如果您只是将一个.ibd文件移动到另一个MySQL实例中,这并不会将其添加到该实例的数据字典中。因此,InnoDB不知道如何查看新文件,也不知道它使用哪个逻辑表。
如果您想找到解决办法,可以使用ALTER TABLE mytable ENGINE=MyISAM,将该文件及其.frm移动到另一个实例,然后ALTER TABLE mytable ENGINE=InnoDB将其更改回。在移动FLUSH TABLES WITH READ LOCK文件之前,请记住使用MyISAM。
但这些步骤并不适合初学者。除非您知道自己在做什么,否则使用备份和还原方法会安全得多。我在试着减轻你的悲伤。
发布于 2014-12-07 12:14:01
有一个简单的过程可以将整个Mysql InnoDB从pc A转移到pc B。
执行该程序的条件如下:
在我的例子中,我不得不移动整个150 my数据库(最大的表有aprox )。60)制作sqldumps并将其加载回不是一个选项(太慢)。
所以我做的是对mysql数据库(mysql文档)进行“冷备份”,然后简单地将文件移动到另一台计算机上。
移动数据库后要执行的步骤在这里描述,dba stackexchange。
我编写这篇文章,是因为(假设您能够遵循所提到的条件)这是迄今为止移动(大型) MySql InnoDb的最快(也是最简单的)方法,而且还没有人提到它。
发布于 2014-01-04 07:24:42
您可以整天复制MyISAM表(只要这些表被刷新和锁定,或者服务器被停止),但是不能用InnoDB完成,因为两个存储引擎处理表和表空间的方式非常不同。
ibdata1)中。不仅表必须是一致的,.ibd文件中也有标识符,它们必须与数据字典内部存储的内容相匹配。在MySQL 5.6之前,随着可传输表空间的引入,这并不是一个受支持的操作。如果您使用的是MySQL 5.6,该链接将为您提供有关此操作的信息。
备选办法:
mysqldump [options] database_name > dumpfile.sql而不使用--databases选项,该选项将转储指定数据库中的表,但将省略任何DATABASE命令(DROP DATABASE、CREATE DATABASE和USE),根据指定选项的组合,这些命令中的一部分或全部通常添加到转储文件中。然后,您可以使用mysql [options] < dumpfile.sql导入它。CREATE TABLE db2.t1 LIKE db1.t1; INSERT INTO db2.t1 SELECT * FROM db1.t1; (对于每个表,您必须重新添加任何外键约束)ALTER TABLE,将其更改为MyISAM,然后使用FLUSH TABLES WITH READ LOCK;刷新并锁定表,将它们复制到表上,然后将所有内容更改为InnoDB。这不是一个好主意,因为您将失去所有外键声明,必须将它们添加回原始表中,但这是另一种选择。https://stackoverflow.com/questions/20237058
复制相似问题