ser*_*gio 4 mysql myisam innodb
我有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数据库文件来移动数据库有什么建议?
即使使用每表文件,这些表也会将某些数据和元数据保留在/ var / lib / mysql / ibdata1中。因此,您不能仅将.ibd文件移动到新的MySQL实例。
您必须备份和还原数据库。您可以使用:
mysqldump,MySQL随附,可靠但速度慢。
mydumper是mysqldump的一个社区贡献替代品,它支持压缩和并行执行以及其他简洁功能。
Percona XtraBackup是免费的,可以执行InnoDB的高速物理备份(并且还支持其他存储引擎)。建议这样做以最大程度地减少对实时操作以及数据库很大的中断。
发表您的评论:
不,您不能仅复制.ibd文件。您无法关闭对ibdata1的需求。除其他事项外,该文件还包括一个数据字典,您可以将其视为书的目录。它告诉InnoDB您拥有哪些表以及它们驻留在哪个物理文件中。
如果仅将.ibd文件移动到另一个MySQL实例中,则不会将其添加到该实例的数据字典中。因此,InnoDB不知道要查找新文件或其附带的逻辑表。
如果需要解决方法,可以ALTER TABLE mytable ENGINE=MyISAM将该文件及其.frm移至另一个实例,然后再将ALTER TABLE mytable ENGINE=InnoDB其更改回。FLUSH TABLES WITH READ LOCK在移动MyISAM文件之前,请记住要。
但是这些步骤不适用于初学者。除非您知道自己在做什么,否则使用备份和还原方法会更安全。我想为您节省一些痛苦。
有一个简单的过程可以将整个 Mysql InnoDB 从 pc A 移动到 pc B。
执行该程序的条件是:
就我而言,我不得不移动整个 150Gb MySql 数据库(最大的表大约有 60Gb)。制作 sqldumps 并重新加载它们不是一种选择(太慢了)。
所以我所做的是对 mysql 数据库(mysql doc)进行“冷备份”,然后简单地将文件移动到另一台计算机。
此处描述了移动数据库后执行的步骤dba stackexchange。
我写这篇文章是因为(假设您能够遵循提到的条件)这是迄今为止移动(大型)MySql InnoDb 的最快(并且可能是最简单的)方法,而且还没有人提到它。