
无为,多年 MySQL DBA 工作经验,现就职于某知名互联网公司,对 MySQL、 Redis、PostgrepSQL 等主流数据库有一定了解,拥有丰富的一线运维经验。
1 迁移场景
2 实战
2.1 在源库创建一张测试表
mysql> use test; Database changed mysql> create table tmp_table(id int primary key,b varchar(20))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.07 sec)
mysql> insert into tmp_table select 1,'a';
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into tmp_table select 2,'b';
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from tmp_table;
+----+------+
| id | b |
+----+------+
| 1 | a |
| 2 | b |
+----+------+
2 rows in set (0.00 sec)复制
2.2 生成元数据文件
mysql> flush tables tmp_table for export; -- 注意:这一步会表锁,不能 insert、update
Query OK, 0 rows affected (0.01 sec)复制
~ root# cd usr/local/mysql/data/test
~ root# ls -l tmp*
-rw-r----- 1 _mysql _mysql 402 Nov 2 19:15 tmp_table.cfg -- 生成的 .cfg 文件
-rw-r----- 1 _mysql _mysql 8580 Nov 2 19:15 tmp_table.frm
-rw-r----- 1 _mysql _mysql 98304 Nov 2 19:15 tmp_table.ibd复制
2.3 创建目标表并丢弃现有表空间
mysql> create table tmp_table(id int primary key,b varchar(20))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.04 sec)
mysql> ALTER TABLE tmp_table DISCARD TABLESPACE; ---丢弃现有表空间复制
注意:※约束条件、字符集等等也必须一致,建议使用 show create table tmp_table; 来获取创建表的 SQL,否则在新服务器上导入表空间的时候会提示 1808 错误。
2.4 将元数据文件复制到目标实例
~ root# scp tmp_table.ibd tmp_table.cfg root@目标ip:/usr/local/mysql/data/test ---传输到目标数据库的test schema目录
~ root# chown mysql.mysql tmp_table.cfg tmp_table.ibd --在目标数据库中授权复制
2.5 在源数据库解锁 tmp_table 表
mysql> unlock table;
Query OK, 0 rows affected (0.01 sec)复制
2.6 在目标数据库中导入 tmp_table 表空间
mysql> alter table tmp_table import tablespace;
Query OK, 0 rows affected (0.23 sec)
mysql> select * from tmp_table;
+----+------+
| id | b |
+----+------+
| 1 | a |
| 2 | b |
+----+------+
2 rows in set (0.00 sec)复制
注意: ALTER TABLE … IMPORT TABLESPACE 特性并不强制对导入的数据施加外键约束。如果表之间有外键约束,那么所有表都应该在相同的(逻辑的)点上导出。在这种情况下,您将停止更新表,提交所有事务,在表上获得共享锁,然后执行导出操作。
本文已收录进 专栏《MySQL 高频面试题解析》
相关文章:
1. 一条 update 语句的生命历程
2. 当前读和快照读的区别
3. InnoDB 怎么做表空间迁移
4. RR 隔离级别下真的不会产生幻读吗?
5. MVCC 怎么实现的?
6. 复制的演进历程
7. 有哪些死锁场景?
8. 物理备份和逻辑备份的区别
最后修改时间:2020-11-12 18:49:44
文章转载自悦专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3159次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
881次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
524次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
451次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
329次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
294次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
291次阅读
2025-05-06 14:40:00
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
280次阅读
2025-04-30 12:17:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
278次阅读
2025-04-28 11:01:25