Mysql数据库物理迁移(针对千万级数据量)

A数据库t_user表迁移到B数据库t_user表。

前提A数据库和B数据库拥有相同的表结构。

1、在B数据库创建表结构,并执行 

ALTER TABLE t_user DISCARD TABLESPACE;

删除B数据库的数据文件(t_user.idb)

2、在A数据库执行

FLUSH TABLES t_user FOR EXPORT;

该命令会对 t_user 加锁,将 t_user 的脏数据从 buffer pool 同步到表文件,同时新生成 1 个文件 t_user.cfg,该文件存储了表的数据字典信息。(注意:这个.cfg文件在新版本没有了)

3、将A数据库下的 t_user.cfg 和 t_user.ibd 文件传输到B数据库的数据目录,
传输完毕后Linux系统需要修改属主

chown -R mysql:mysql t_user.ibd

内网传输可采用 nc 隧道模式,30G传输完成大约在3分钟左右完成。

4、释放 flush table 执行时获取的MDL共享锁,A数据库执行

unlock tables;

解锁表 t_user,此时 t_user 恢复正常读写。

5、B数据库执行

ALTER TABLE t_user IMPORT TABLESPACE;

执行导入数据命令(实则是注册表的元数据信息到表空间中)。

注意:在迁移数据库时不允许出现DDL操作的出现,会阻塞DDL语句的。

你可能感兴趣的:(数据库,mysql,linux,centos)