Innodb表空间迁移

有cfg文件时表空间迁移

在源表上显示建表语句:

mysql> use test

mysql> show create table t1;
+-------+---------------------------------------------------------------------------------------+
| Table | Create Table                                                                          |
+-------+---------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

在目标表上创建一样的表:

mysql> CREATE TABLE `t1` (
    ->   `a` int(11) DEFAULT NULL
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
Query OK, 0 rows affected (0.07 sec)

在目标表上放弃此表对应的数据文件

mysql> alter table t1 discard tablespace;
Query OK, 0 rows affected (0.03 sec)
mysql> system ls -l /var/lib/mysql/test/t1.*
-rw-r----- 1 mysql mysql 8554 Jan 10 02:06 /var/lib/mysql/test/t1.frm
mysql> 

在源表上输出表,注意加了一个读锁,产生了一个cfg结尾的文件。

mysql> flush tables t1 for export;
Query OK, 0 rows affected (0.04 sec)

mysql> select * from t1;
+------+
| a    |
+------+
|    1 |
+------+
mysql> update t1 set a=1;
ERROR 1099 (HY000): Table 't1' was locked with a READ lock and can't be updated
mysql> 

1 row in set (0.02 sec)
root@scutech:/var/lib/mysql/test# ls -l /var/lib/mysql/test/t1.*
-rw-r----- 1 mysql mysql   356 Jan 10 13:41 /var/lib/mysql/test/t1.cfg
-rw-r----- 1 mysql mysql  8554 Jan  2 18:32 /var/lib/mysql/test/t1.frm
-rw-r----- 1 mysql mysql 98304 Jan  2 18:32 /var/lib/mysql/test/t1.ibd

把文件拷贝过去:

root@scutech:/var/lib/mysql/test# scp t1.{cfg,ibd} [email protected].??.???:/var/lib/mysql/test/
[email protected].??.???'s password: 
t1.cfg                                                                                                                                                                    100%  356   212.9KB/s   00:00    
t1.ibd                                                                                                                                                                    100%   96KB  15.6MB/s   00:00    
root@scutech:/var/lib/mysql/test# 

在源上解锁表:

mysql> unlock tables;
Query OK, 0 rows affected (0.01 sec)

在目标上库导入:


mysql> select * from t1;
ERROR 1814 (HY000): Tablespace has been discarded for table 't1'
mysql> alter table t1 import tablespace;
Query OK, 0 rows affected (0.03 sec)

mysql> select * from t1;
+------+
| a    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> 

无cfg文件时表空间迁移

如果源数据库以及crash了,不可能导出cfg文件,我们怎么进行迁移呢?我们可以试一下没有cfg文件的加载,其它步骤一样:


mysql> \! chown mysql. /var/lib/mysql/test/a.ibd
mysql> alter table a import tablespace;
Query OK, 0 rows affected, 1 warning (0.07 sec)

mysql> show warnings;
+---------+------+----------------------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                                |
+---------+------+----------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1810 | InnoDB: IO Read error: (2, No such file or directory) Error opening './test/a.cfg', will attempt to import without schema verification |
+---------+------+----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> 

我们看到提示只是没有进行schema的校验,顺利加载。

发布了23 篇原创文章 · 获赞 2 · 访问量 1250

猜你喜欢

转载自blog.csdn.net/weixin_43424368/article/details/103923002