加入收藏 | 设为首页 | 会员中心 | 我要投稿 徐州站长网 (https://www.0516zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql服务器中表误删除(drop table)了,怎么恢复呢?

发布时间:2022-12-12 14:05:10 所属栏目:MySql教程 来源:互联网
导读: 一、使用限制和说明:
1、MySQL5.6.6及以上版本。
1、主从innodb_file_per_table必须设置为on。
2、必须是innodb表,非分区表。
4、表结构必须一致。
5、不支持外键约束。
二、原理
利用My

一、使用限制和说明:

1、MySQL5.6.6及以上版本。

1、主从innodb_file_per_table必须设置为on。

2、必须是innodb表,非分区表。

4、表结构必须一致。

5、不支持外键约束。

二、原理

利用MySQL表空间传输特性,即transportable tablespace特性mysql删除表,允许表空间从一个实例移动到另一个实例上,将.cfg 和 .ibd

文件复制过去,用于再导入时更新表元数据。

三、拿备份恢复后的ibd文件恢复:

恢复单表备份

shell> xtrabackup --prepare --export --target-dir=/backup/base_20220304

需恢复的表名为aaa,在test库下,从备份文件中物理拷贝过来aaa.ibd文件

mysql> create table aaa;

mysql> alter table aaa discard tablespace;

shell> cp /backup/base_20220304/aaa.cfg /opt/mysql3306/data/test/aaa.cfg

shell> cp /backup/base_20220304/aaa.ibd /opt/mysql3306/data/test/aaa.ibd

shell> chown mysql.mysql aaa.* && chmod 644 aaa.*

mysql> alter table aaa import tablespace; ----时间长短受ibd文件大小的限制

四、拿实例运行中的ibd文件恢复,例如延迟从库

实例a:待恢复

实例b:正常状态

1、实例a:

mysql> alter table aaa discard tablespace;

2、实例b:执行flush tables ... for export语句静默表并生成.cfg元数据文件。flush tables ... for export 这个执行之后,会话不能退出,否则cfg自动消失。

mysql> flush tables aaa for export;

shell> cp /opt/mysql3306/data/test/aaa.cfg /tmp----备份

shell> cp /opt/mysql3306/data/test/aaa.ibd /tmp

mysql> unlock tables;

3、scp复制实例b上tmp目录的.ibd和.cfg文件到实例a上。

4、实例a:

mysql> alter table aaa import tablespace;

五、注意事项

1、上述操作务必不能删除.frm文件,如需删除,请提前cp一份。

2、必须确保双方ibd文件对应的表结构是一致,否则后面恢复就很麻烦,甚至需要重启实例恢复。

六、复杂问题

1、例如前一天全备后,第二天做过加字段,改换过字段顺序;或者拿测试环境表结构恢复,之后才发现实际表结构与生产不一致;

回答:如果拿来恢复的ibd文件对应的表结构与实际要恢复的表结构不一致时,因为没有提前发现,这时执行alter table aaa import tablespace会报错某些字段不一致,不要慌,drop table aaa,然后创建与拿来恢复的ibd文件一样的表结构,重新恢复。如果这时新建的表还是与拿来恢复的ibd文件表结构不一致,后续恢复如遇到报错就需要重启实例恢复。

2、表被drop后,没有保留表结构,或者不记得表结构了。

回答:MySQL官方下载并安装mysqlfrm,可以恢复ibd文件对应的表结构。

[root@test mysql-utilities-1.6.5]#tar -zxvf mysql-utilities-1.6.5.tar.gz

[root@test mysql-utilities-1.6.5]#cd mysql-utilities-1.6.5/

[root@test mysql-utilities-1.6.5]# ll

total 140

-rw-r--r-- 1 mysql mysql 37814 Mar 3 09:48 CHANGES.txt

-rw-r--r-- 1 mysql mysql 17987 Mar 3 09:48 LICENSE.txt

-rw-r--r-- 1 mysql mysql 928 Mar 3 09:48 PKG-INFO

-rw-r--r-- 1 mysql mysql 34819 Mar 3 09:48 README.txt

drwxr-xr-x 4 root root36 Mar 3 09:48 build

drwxr-xr-x 3 mysql mysql 17 Mar 3 09:48 docs

-rw-r--r-- 1 mysql mysql 6680 Mar 3 09:48 info.py

-rw-r--r-- 1 root root 5597 Mar 3 09:48 info.pyc

drwxr-xr-x 4 mysql mysql 79 Mar 3 09:48 mysql

drwxr-xr-x 2 mysql mysql 4096 Mar 3 09:48 scripts

-rw-r--r-- 1 mysql mysql 14232 Mar 3 09:48 setup.py

drwxr-xr-x 2 mysql mysql 4096 Mar 3 09:48 unit_tests

[root@test mysql]# python setup.py build

[root@test mysql]# python setup.py install

mysqlfrm --diagnostic /opt/mysql3306/data/test.frm

注意:这样恢复的表结构可能字段类型和长度与原表不一样,但字段名和顺序肯定一致,可以参考之前的表结构字段类型和长度,人工组织下表结构。

码字不易,如果对你有帮助,欢迎点赞支持;如果对文章内容有任何的疑问或者是我有写的不对的地方,欢迎评论区与我探讨。

(编辑:徐州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!