Innodb 表空间传输迁移大表

参考:小萝卜   http://www.cnblogs.com/xiaoboluo768/p/5108785.html


     在mysql5.5之前,mysql实例中innodb引擎表的迁移是个头疼的问题,要么使用mysqldump导出,要么使用物理备份的方法,但是在mysql5.6之后的版本中,可以使用一个新特性,方便地迁移Innodb表,这样一来大的innodb表的迁移就显得很easy,这个特性就是innodb表空间传输:目前我实验用的是小表,有机会就可以用大表测试下。

 
1.在迁出实例数据库:

mysql> use db1;

>select * from t1; #查询一下迁出实例表数据,这里是测试表,大表请不要这么干
+------+---------+------+------+
| id   | name    | sex  | age  |
+------+---------+------+------+
|    1 | aaa     | f    |   23 |
|    2 | abb     | m    |   23 |
|    6 | cccb    | m    |   27 |
|    3 | cddccb  | m    |   27 |
|    4 | ceeeccb | m    |   99 |
+------+---------+------+------+
5 rows in set (0.00 sec)
>show create table t1;  #查看表定义语句,复制出来
+-------+--------------------------------+
| table | create table                                                                                                                                                                          |
+-------+--------------------------------+
| t1    | create table `t1` (
  `id` int(10) default null,
  `name` varchar(20) default null,
  `sex` varchar(5) default null,
  `age` int(3) default null
) engine=innodb default charset=utf8 |
+-------+--------------------------------+
1 row in set (0.05 sec)

2.在迁入实例数据库:
mysql> create database db2;

建表:
mysql> use db2
create table `t1` (
  `id` int(10) default null,
  `name` varchar(20) default null,
  `sex` varchar(5) default null,
  `age` int(3) default null
) engine=innodb default charset=utf8

查看表相关文件:

[root@llmj-svn-26-108 db2]# ll /data/mysql/mysql_3306/data/db2/t1*
-rw-r----- 1 mysql mysql  8642 Mar 10 13:59 /data/mysql/mysql_3306/data/db2/t1.frm
-rw-r----- 1 mysql mysql 98304 Mar 10 13:59 /data/mysql/mysql_3306/data/db2/t1.ibd
mysql> alter table t1 discard tablespace;#注意再三确认这个命令有没有搞错对象,一执行就会把ibd文件给删掉

再次查看表相关文件,可以看到没有了表空间文件ibd:
[root@llmj-svn-26-108 db2]# ll /data/mysql/mysql_3306/data/db2/t1*
-rw-r----- 1 mysql mysql 8642 Mar 10 13:59 /data/mysql/mysql_3306/data/db2/t1.frm

3.在迁出实例数据库:
mysql> use db2;
mysql> flush tables  t1 for export; #这个时候会加表锁,只能读不能写,同时也会产生一个tb_name.cfg文件

然后复制这个表的ibd和cfg文件到迁入实例的新建同名库目录下:
[root@node1 db2]# scp t1.{cfg,ibd} root@192.168.26.108:/data/mysql/mysql_3306/data/db2/
reverse mapping checking getaddrinfo for bogon [192.168.26.108] failed - POSSIBLE BREAK-IN ATTEMPT!
root@192.168.26.108's password: 
t1.cfg                                                                          100%  513     0.5KB/s   00:00    
t1.ibd                                                                          100%   96KB  96.0KB/s   00:00

mysql> unlock tables; #解锁迁出实例表

4.在迁入目标实例上:
mysql> use db2;
chown mysql.mysql /data/mysql3306/xiaoboluo/test1.{ibd,cfg}

查看文件权限:
[root@llmj-svn-26-108 db2]# chown mysql:mysql t1*
[root@llmj-svn-26-108 db2]# ll
total 116
-rw-r----- 1 mysql mysql    61 Mar 10 13:58 db.opt
-rw-r----- 1 mysql mysql   513 Mar 10 14:04 t1.cfg
-rw-r----- 1 mysql mysql  8642 Mar 10 13:59 t1.frm
-rw-r----- 1 mysql mysql 98304 Mar 10 14:04 t1.ibd

mysql> Alter table t1 import tablespace;  #导入表空间文件
> select * from t1; #校验数据是否正常,这里是测试表,大表请用其他方法验证数据
+------+---------+------+------+
| id   | name    | sex  | age  |
+------+---------+------+------+
|    1 | aaa     | f    |   23 |
|    2 | abb     | m    |   23 |
|    6 | cccb    | m    |   27 |
|    3 | cddccb  | m    |   27 |
|    4 | ceeeccb | m    |   99 |
+------+---------+------+------+
5 rows in set (0.00 sec)
到这里整个innodb表就被迁移完成,是不是比以前的方法方便很多呢!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值