## 背景:服务器中,MySQL程序坏了,也没有做定时备份的操作。为了是数据库恢复到最新的。
## 方法:可以使用MySQL的 .ibd 文件恢复。(需要原数据库的表结构)
## 文件位置:在Ubuntu系统中,默认位置是:/var/lib/mysql .ibd文件就在这个目录下。
1、单个表恢复的情况
1.1、停止MySQL程序,备份.bd文件(若程序已经无法启动,则直接备份)
1.2、用原来表结构建表。
1.3、删除新建表的表空间。
ALTER TABLE 表名 DISCARD TABLESPACE;
1.4、将备份好的.ibd文件,复制到目标数据库数据ibd文件的目录下,并修改.ibd文件权限。
sudo chmod 777 表名.ibd
1.5、重新导入表空间即可恢复数据(无需重启目标数据库服务)
ALTER TABLE 表名 IMPORT TABLESPACE;
1.6、执行完后,刷新数据库 原来的数据就已经恢复。
2、多个表批量恢复的情况
2.1、批量拼接数据库中所有表的 删除表空间语句。
SELECT concat('alter table ', table_name, ' discard tablespace;') FROM information_schema.tables WHERE table_schema = '数据库名称';
±-----------------------------------------------------------+
| concat('alter table ‘, table_name, ’ discard tablespace;’) |
±-----------------------------------------------------------+
| alter table config discard tablespace; |
| alter table sysconfig discard tablespace; |
2.2、然后复制下来,执行所有语句。
2.3、批量拼接数据库中所有表的 导入表空间语句。
SELECT concat('alter table ', table_name, ' import tablespace;') FROM information_schema.tables WHERE table_schema = '数据库名';
±----------------------------------------------------------+
| concat('alter table ‘, table_name, ’ import tablespace;’) |
±----------------------------------------------------------+
| alter table config import tablespace; |
| alter table sysconfig import tablespace; |
2.4、然后复制下来,执行所有语句。
2.5、执行完后,刷新数据库 原来的数据就已经恢复。