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)

 

posted @ 2023-05-18 16:14  slnngk  阅读(2548)  评论(0编辑  收藏  举报