
MySQL 迁移 MySQL
表空间传输
日常工作中经常遇到将一个 InnoDB 表从一个实例,移动或者复制到另一个实例,在 5.6 之前
常用的是通过物理或者逻辑备份来实现。在 MySQL 5.6.6 版本中引入了一种基于表空间快速
迁移的功能,我们可以直接将表空间复制到另一台服务器数据库中。这对于大表来说是一个非
常有用的方法。可传输表空间机制比任何其他导出和导入表的方法都快,因为只需要使用传统
的 Linux 命令(cp、scp、rsync)将数据文件复制到目标位置即可。
但是,这种方法的使用也有一定的局限性:
1. 需要到服务器上拷贝数据,在用户无法登录数据库主机的场景下无法使用
2. 必须是全表拷贝,不能只拷贝部分数据;
3. 由于是通过拷贝物理文件实现的,源表和目标表都是使用 InnoDB 引擎时才能使用。
迁移步骤
1.在目标库上创建空表
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;
2.删除.idb 文件
在目标库上创建空表后,建产生 1 个文件(.ibd)。需要删除 .ibd 文件,以便从目标库复制表
空间过来
[root@localhost testdb]# ll
总用量 112
-rw-r----- 1 mysql mysql 114688 3 月 11 09:52 users.ibd
mysql> alter table users discard tablespace;
Query OK, 0 rows affected (0.13 sec)
[root@localhost testdb]# ll
总用量 0
3.准备源表
确保 users 表的更新已经刷新到磁盘,以便在服务器运行时制作表副本,在源库中执行:
mysql> flush table users for export;
Query OK, 0 rows affected (0.00 sec)
执行该命令后,将在 MySQL 数据目录中创建 1 个附加文件(.cfg)
-rw-r----- 1 mysql mysql 781 3 月 11 09:45 users.cfg
-rw-r----- 1 mysql mysql 114688 3 月 10 16:14 users.ibd
4.将 .ibd 和.cfg 文件从源库复制到目标库
相关文档
评论