mysql中表空间传输的示例分析


这篇文章主要介绍了mysql中表空间传输的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说明:MySQL(5.6.6及以上),innodb_file_per_table开启。1.1. 操作步骤:0. 目标服务器创建相同表结构
1. 目的服务器: ALTER TABLE t DISCAR开发云主机域名D TABLESPACE;
2. 源服务器 : FLUSH TABLES t FOR EXPORT;
3. 从源服务器上 拷贝t.ibd, t.cfg文件到目的服务器
4. 源服务器: UNLOCK TABLES;
5. 目的服务器: ALTER TABLE t IMPORT TABLESPACE;1.2. 演示
将多实例的 [mysql5711] 中 burn_test 库下的test_purge表 ,传输到 [mysql57112]中 burn_test2 库下的test_purge表1.2.1. 准备工作1. 在 目标服务器 上创建表空间– 源服务器 [mysql5711]mysql> select * from burn_test.test_purge;
+—-+——+
| a | b |
+—-+——+
| 1 | 10 |
| 3 | 30 |
| 4 | 40 |
| 5 | 50 |
| 6 | 60 |
| 7 | 70 |
| 8 | 80 |
| 10 | 100 |
+—-+——+
8 rows in set (0.01 sec)– 目标服务器 [mysql57112]

— test_purge在 目标服务器 上不存在,先创建该表
mysql> CREATE TABLE `test_purge` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
UNIQUE KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.16 sec)2. 创建完成后进行检查
#
# 目标服务器
#
[root@MyServer burn_test_2]> ll | grep test_purge
-rw-r—–. 1 mysql mysql 8578 Mar 21 10:31 test_purge.frm # 表结构
-rw-r—–. 1 mysql mysql 57344 Mar 21 10:31 test_purge.ibd # 表空间,需要通过 DISCARD 将开发云主机域名表空间文件删除
ALTER TABLE test_purge DISCARD TABLESPACE; 的含义是 保留test_purge.frm 文件, 删除test_purge.ibd3. 通辟 discard 删除ibd文件– 目标服务器mysql> alter table test_purge discard tablespace;
Query OK, 0 rows affected (0.04 sec)
mysql> show tables;
+———————–+
| Tables_in_burn_test_2 |
+———————–+
| test_backup1 |
| test_purge |
+———————–+
2 rows in set (0.00 sec)
mysql> select * 开发云主机域名from test_purge;
ERROR 1814 (HY000): Tablespace has been discarded for table ‘test_purge’
[root@MyServer burn_test_2]> ll | grep test_purge
-rw-r—–. 1 mysql mysql 8578 Mar 21 10:31 test_purge.frm1.2.2. 导出表空间
1. 在源服务器上,通辟 export 命令导出表空间(同时加读锁)– 源服务器mysql> flush table test_purge for export; — 其实是对这个表加一个读锁
Query OK, 0 rows affected (0.00 sec)
2. 将导出的 cfg文件 和 ibd文件 , 拷贝到目标服务器 的数据库下
#
# 源服务器
#
[root@MyServer burn_test]> ll | grep test_purge
-rw-r—–. 1 mysql mysql 462 Mar 21 10:58 test_purge.cfg # export后,多出来的文件,里面保存了一些元数据信息
-rw-r—–. 1 mysql mysql 8578 Mar 4 15:41 test_purge.frm
-rw-r—–. 1 mysql mysql 57344 Mar 5 15:28 test_purge.ibd
[root@MyServer burn_test]> cp test_purge.cfg test_purge.ibd /data/mysql_data/5.7.11_2/burn_test_2/ # 拷贝表空间和cfg文件,远程请使用scp(本地多实例演示,这里的库名是不同的)
3. 导出表空间后,尽快解锁– 源服务器mysql> unlock tables; — 尽快的解锁
Query OK, 0 rows affected (0.00 sec)
注意:一定要先拷贝cfg和ibd文件,然后才能unlock,因为 unlock 的时候, cfg文件会被删除
# 源服务器上的日志
[Note] InnoDB: Stopping purge # 其实stop purge,找个测试的表 for export 即可
[Note] InnoDB: Writing table metadata to ‘./burn_test/test_purge.cfg’
[Note] InnoDB: Table `burn_test`.`test_purge` flushed to disk
[Note] InnoDB: Deleting the meta-data file ‘./burn_test/test_purge.cfg’ # unlock table后,该文件自动被删除
[Note] InnoDB: Resuming purge # unlock后,恢复purge线程
4. 在目标服务器上 修改 cfg文件和ibd文件的 权限
#
# 目标服务器
#
[root@MyServer burn_test_2]> chown mysql.mysql test_purge.cfg test_purge.ibd
5. 在目标服务器上通辟 import 命令导入表空间
— 目标服务器

mysql> alter table test_purge import tablespace; — 导入表空间
Query OK, 0 rows affected (0.24 sec)
mysql> select * from test_purge; — 可以读取到从源服务器拷贝过来的数据
+—-+——+
| a | b |
+—-+——+
| 1 | 10 |
| 3 | 30 |
| 4 | 40 |
| 5 | 50 |
| 6 | 60 |
| 7 | 70 |
| 8 | 80 |
| 10 | 100 |
+—-+——+
8 rows in set (0.00 sec)# error.log中出现的信息
InnoDB: Importing tablespace for table ‘burn_test/test_purge’ that was exported from host ‘MyServer’注意:
表的名称必须相同 ,经过上述测试,库名可以不同
该方法也可以用于分区表的备份和恢复感谢你能够认真阅读完这篇文章,希望小编分享的“mysql中表空间传输的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持开发云,关注开发云行业资讯频道,更多相关知识等着你来学习!

相关推荐: 服务器硬件设备中采用SSD固态硬盘有哪些必要性

本篇内容介绍了“服务器硬件设备中采用SSD固态硬盘有哪些必要性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当下,互联网站长牵肠挂肚的,莫过于网站服务器了。随着…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/29 17:24
下一篇 03/29 17:25

相关推荐