MySQL 数据恢复及迁移系列:IMPORT(可传输表空间)

由于个人能力有限,文中可能存在错误,欢迎批评指正。

1.解决哪些实际问题?

  • 文件损坏恢复部分数据
  • 快速进行数据迁移

2.前置条件

  • 必须开启 innodb_file_per_table
  • 表空间页大小必须与实例配置页大小( innodb_page_size)匹配
  • 数据库版本必须保证一致
  • ROW_FORMAT 必须保证配置一致

3.测试验证

这里测试将 test 库中的表 t2 迁移到 test1 库中。

mysql> use test
Database changed

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

mysql> select * from t2;
+------+
| id   |
+------+
|    2 |
+------+
1 row in set (0.01 sec)

mysql> system ls -l /mysql/data/test/
total 116
-rw-r----- 1 mysql mysql    67 Jun 17 13:31 db.opt
-rw-r----- 1 mysql mysql  8556 Jun 20 13:46 t2.frm
-rw-r----- 1 mysql mysql 98304 Jun 20 13:46 t2.ibd

# 创建测试库 test1
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)

mysql> system ls -l /mysql/data/test1/
total 4
-rw-r----- 1 mysql mysql 67 Jun 27 16:28 db.opt

# 在 test1 中创建相同表结构的 t2
mysql> CREATE TABLE `t2` (   `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.01 sec)

mysql> system ls -l /mysql/data/test1/
total 116
-rw-r----- 1 mysql mysql    67 Jun 27 16:28 db.opt
-rw-r----- 1 mysql mysql  8556 Jun 27 16:30 t2.frm
-rw-r----- 1 mysql mysql 98304 Jun 27 16:30 t2.ibd

# 删除表空间
mysql> ALTER TABLE t2 DISCARD TABLESPACE;
Query OK, 0 rows affected (0.07 sec)

mysql> system ls -l /mysql/data/test1/
total 16
-rw-r----- 1 mysql mysql   67 Jun 27 16:28 db.opt
-rw-r----- 1 mysql mysql 8556 Jun 27 16:30 t2.frm

# 将 test 库 t2 表的 .ibd 文件拷贝至 test1 库目录下
[mysql@host01 data]$ cp test/t2.ibd test1/
[mysql@host01 data]$ ll /mysql/data/test1/
total 116
-rw-r----- 1 mysql mysql    67 Jun 27 16:28 db.opt
-rw-r----- 1 mysql mysql  8556 Jun 27 16:30 t2.frm
-rw-r----- 1 mysql mysql 98304 Jun 27 16:32 t2.ibd

mysql> use test1;
Database changed

mysql> system ls -l /mysql/data/test1/
total 116
-rw-r----- 1 mysql mysql    67 Jun 27 16:28 db.opt
-rw-r----- 1 mysql mysql  8556 Jun 27 16:30 t2.frm
-rw-r----- 1 mysql mysql 98304 Jun 27 16:32 t2.ibd

# 导入表空间
mysql> ALTER TABLE t2 IMPORT TABLESPACE;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> select * from t2;
+------+
| id   |
+------+
|    2 |
+------+
1 row in set (0.00 sec)

参考资料

【1】Importing InnoDB Tables

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值