mysql8使用ibd文件恢复数据
环境:
OS:Centos 7
DB:mysql8.0.17
前提条件:安装一个与无法启动的数据库同版本的数据库
1.创建同结构的表
说明:
mysql8.0已经没有frm文件了,只存在一个ibd文件,表结构信息可以使用ibd2sdi(mysql8自带)工具获取
CREATE TABLE `tb_test01` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name1` varchar(20) DEFAULT NULL, `name2` varchar(20) DEFAULT NULL, `name3` varchar(20) DEFAULT NULL, `name4` varchar(20) DEFAULT NULL, `name5` varchar(20) DEFAULT NULL, `name6` varchar(20) DEFAULT NULL, `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
2.脱离表空间
mysql> alter table tb_test01 discard tablespace;
Query OK, 0 rows affected (0.12 sec)
这个时候该表对应的ibd文件会自动删除掉
3.关闭数据库
/opt/mysql8/bin/mysqladmin -h localhost -uroot -P13306 --socket=/opt/mysql8/mysql.sock -p shutdown
4.将不能启动的db对应的表ibd文件拷贝到正常的实例的目录下
scp /opt/mysql8/data/db_test/tb_test01.ibd root@192.168.1.135:/opt/mysql8/data/db_test/
文件传输到目标机器后,注意修改权限
[root@host135 data]# chown -R mysql:mysql ./db_test
5.启动实例
/opt/mysql8/bin/mysqld_safe --defaults-file=/opt/mysql8/conf/my.cnf --user=mysql &
6.import表空间
登录数据库
mysql> use db_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed, 1 warning
导入表空间
mysql> alter table tb_test01 import tablespace;
Query OK, 0 rows affected, 1 warning (5.86 sec)
查看数据是否恢复
mysql> select count(1) from tb_test01;
+----------+
| count(1) |
+----------+
| 1000000 |
+----------+
1 row in set (0.09 sec)