mysql之 表空间传输
说明:MySQL(5.6.6及以上),innodb_file_per_table开启。
1.1. 操作步骤:
0. 目标服务器创建相同表结构
1. 目的服务器: ALTER TABLE t DISCARD 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.ibd
3. 通辟 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.frm
1.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之 表空间传输的更多相关文章
- MySQL 表空间传输
聊到MySQL数据迁移的话题,表空间传输时一个很实用的方法. 在MySQL 5.6 Oracle引入了一个可移动表空间的特征(复制的表空间到另一个服务器)和Percona Server采用部分备份,这 ...
- Innodb 表空间传输迁移数据
在mysql5.5之前,mysql实例中innodb引擎表的迁移是个头疼的问题,要么使用mysqldump导出,要么使用物理备份的方法,但是在mysql5.6之后的版本中,可以使用一个新特性,方便地迁 ...
- mysql 案例 ~ 表空间迁移数据与数据导入
一 简介:mysql5.6+的表空间传输二 目的:复制数据到另一个表三 步骤 1 create table b like a ->创建一个空表 2 alter table b disc ...
- Oracle表空间传输测试
源数据库平台:window 7 64bit Oracle 11g 64bit目标数据库平台:RHEL6 64bit Oracle 11g 64bit 1.查看数据集 select * from nls ...
- Oracle11gR2导入导出实战之表空间传输
Oracle11gR2导入导出实战之使用Datapump进行表空间传输 表空间检查 [oracle@localhost database]$ ps -ef|grep smon oracle 8981 ...
- MySQL的表空间管理
表空间: MySQL没有真正意义上的表空间管理. MySQL的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间. 一般来说,当数据量很小的时候建议使用共享表空间的管理方式. ...
- mysql通过表空间来恢复或者传递数据
mysql的备份工具通常有 mysqldump ,mysqlpump(5.7后新特性)等备份工具,这里我们可以尝试使用表空间进行传递 方式是:拷贝数据文件+拷贝表空间 对应innodb引擎就是 i ...
- 谈谈什么是MySQL的表空间?
今天我要跟你分享的话题是:"大家常说的表空间到底是什么?究竟什么又是数据表?" 这其实是一个概念性的知识点,当作拓展知识.涉及到的概念大家了解一下就好,涉及的参数,留个印象就好. ...
- mysql表空间传输(ERROR 1808) row_format设置
文章结构如下: 从MYSQL5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者机器上.迁移的时候很方便,尤其是大表. 由于本次达到测试使用版本5.6.38传到5.7 ...
随机推荐
- Arduino-汉王PM2.5检测模组B1
汉王PM2.5检测模组B1,接入Arduino,使用I2C1602显示屏显示 #include <Arduino.h> #include <Wire.h> #include & ...
- 句柄线程做参数和PostMessage的用法
当我们启动一个线程,并且要给线程函数传递的参数是窗口句柄时,我们应该这样做: HWND hHwnd = GetSafeHwnd(); HANDLE hThread; DWORd dwThreadId; ...
- python 一行代码字符串转字典方法
b = 'bid=Qzw9cKnyESM; ll="108288"; __yadk_uid=4YChvgeANLBEh4iV00n1tc0HQ8zpmSl1; __utmc=301 ...
- puppet确保程序运行
exec { 'keep-nginx-running' : user => 'root', unless => 'ps -x | grep nginx|grep -v grep', com ...
- vue 之 Virtual Dom
什么是Virtual Dom Virtual Dom可以看做一棵模拟了DOM树的JavaScript树,其主要是通过vnode,实现一个无状态的组件,当组件状态发生更新时,然后触发Virtual Do ...
- linux 调试技巧
1.添加log printf("\033[1;43m %s,%s,%d\033[0m\n",__FILE__,__FUNCTION__,__LINE__); FILE:文件名 FU ...
- 何时使用SUM()与SUMX()
概述 SUM()是一个聚合函数.在应用将影响公式的所有过滤器后,它会将您指定的单个列中的所有值相加.SUM()不知道行的存在(它不能逐行求值) - 它所能做的就是在应用过滤器之后将所有内容添加到它所呈 ...
- MySQL篇,第三章:数据库知识3
MySQL 数据库 3 索引 1.普通索引(MUL) 2.唯一索引(UNI) 3.主键索引(PRI) 1.使用规则 1.一个表中只能有一个主键(primary)字段 2.对应字段的值不允许重复 ...
- Python中random模块在主函数中设置随机种子是否对于调用的函数中的随机值产生影响?
一个问题,加入我有一个工程文件,在main函数里面调用random模块,设置随机种子,主函数中的随机种子的设置是否会影响主函数所调用的函数中的随机值? 实际上这个问题非常重要,比如你在跑网络的时候,初 ...
- next_permutation(start,end)
一道水题,简单的next_permutation用法,相同的还有prev_permutation 包含在头文件<algorithm>中 字符串 acab 含有两个a ,一个b ,一个c , ...