mysql表空间传输

表空间传输,mysql5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者应一台机器上。
相比mysqldump的方式,表空间传输要快的多,而且更加灵活。

使用条件:
1,5.6版本以上
2,使用独立表空间方式,默认开启。
3,源库与目标库的page size必须一样。
4,当表做导出操作时,该表只能进行只读操作。

例子:
目的:把test下 t1表的数据传输到db1库下的t1表,test库下t1表的数据。
mysql> select * from t1;
±—±-------+
| id | name |
±—±-------+
| 3 | 22 |
| 4 | aa |
| 5 | 阿里 |
±—±-------+
3 rows in set (0.00 sec)

首先创建db1库,并创建与test.t1表结构一样的表t1表:
use db1

mysql> show create table t1;
±------±--------------------------------------------------------------------------------
| Table | Create
| t1 | CREATE TABLE t1 (
id int(11) NOT NULL,
name varchar(40) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |----------------------------------------------------
1 row in set (0.00 sec)

并生成了t1表的数据信息:
[root@localhost db1]# ll
总用量 112
-rw-r-----. 1 mysql mysql 61 2月 6 00:35 db.opt
-rw-r-----. 1 mysql mysql 8586 2月 6 00:39 t1.frm
-rw-r-----. 1 mysql mysql 98304 2月 6 00:39 t1.ibd

卸载db1.t1表的表空间:
mysql> use db1;
Database changed
mysql> alter table t1 discard tablespace;
Query OK, 0 rows affected (0.01 sec)
ysql> select * from t1;
ERROR 1814 (HY000): Tablespace has been discarded for table ‘t1’
mysql> desc t1;
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(40) | YES | | NULL | |
±------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)

可以看到t1.ibd文件已经被删除了。
[root@localhost db1]# ll
总用量 16
-rw-r-----. 1 mysql mysql 61 2月 6 00:35 db.opt
-rw-r-----. 1 mysql mysql 8586 2月 6 00:39 t1.frm

在test库执行表空间导出操作:
mysql> use test
Database changed
mysql> flush table t1 for export;
Query OK, 0 rows affected (0.00 sec)

可以看到test库下多了个t1.cfg文件:

[root@localhost test]# ll
总用量 116
-rw-r-----. 1 mysql mysql 61 2月 5 22:58 db.opt
-rw-r-----. 1 mysql mysql 396 2月 6 00:48 t1.cfg
-rw-r-----. 1 mysql mysql 8586 2月 5 22:59 t1.frm
-rw-r-----. 1 mysql mysql 98304 2月 6 00:35 t1.ibd

将test库下t1.cfg,t1.ibd复制到db1库下:
[root@localhost test]# cp t1.cfg t1.ibd …/db1/
[root@localhost test]# chown mysql.mysql *

show open tables where in_use>0;;
±---------±------±-------±------------+
| Database | Table | In_use | Name_locked |
±---------±------±-------±------------+
| test | t1 | 1 | 0 |
±---------±------±-------±------------+
1 row in set (0.00 sec)
可以看到目前处于只读操作,所以需要执行解锁操作。
mysql>use test`Database changed
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

最后在db1库下执行表空间导入操作:
mysql> alter table t1 import tablespace;
Query OK, 0 rows affected (0.03 sec)

mysql> select * from t1;
±—±-------+
| id | name |
±—±-------+
| 3 | 22 |
| 4 | aa |
| 5 | 阿里 |
±—±-------+
3 rows in set (0.00 sec)

表空间传输完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值