有的数据表存有上百万条数据,体积达到了GB单位,此时通过mysqldump或者Navicat传输助手这类的方法显然太慢了,那么复制黏贴一下数据库data目录下的文件是不是可以更快一点呢?
诶,今儿咱就来试试!
首先目标数据库需要创建一个与源数据库同名的库和表,表需要与源表的表结构一致。这步操作的原因大概可以理解为,MySQL的innodb表结构和数据是分开存储的,为了不影响目标数据库原有的数据记录,我们仅迁移单独记录的数据即可。
创建完成后,把目标数据库的表空间删除
alter table `test-a`.person discard tablespace;
然后,复制源数据库data目录下的ibd文件到目标数据库的相同位置下,此时需要注意ibd的文件权限可能会改变。如果是宿主机安装的MySQL那目标权限可能是mysql:mysql,我这里是docker安装的,所以目标权限是polkitd:input,因此需要改写一下ibd文件的权限(命令最后是个.千万要注意,这个不是句号,不是手误多打了!.表示当前目录!当然也可以输入./)
chown -R polkitd:input .
改变好权限后,目标数据库需要导入表空间数据
alter table `test-a`.person import tablespace
此时,数据就迁移过来了!打开Navicat看看吧!
收工!