mysql单表恢复--测试

本文介绍了MySQL单表恢复的过程,特别关注了InnoDB存储引擎的恢复操作。首先,删除并重新创建表t6,然后丢弃表空间,将备份的t6.ibd文件复制到数据目录,并导入表空间,成功恢复表数据。对于MyISAM存储引擎,只需复制表的物理文件到对应数据库即可。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单表恢复前提: 知道表结构

测试:
对数据库进行全备:

innobackupex --defaults-file=/etc/my4.cnf  --user=root --password='' --socket=/tmp/mysql4.sock --databases="test" /tmp/full/

innodb存储引擎

进入数据库
查看t6表数据:

mysql> select * from t6;
+—-+
| id |
+—-+
| 0 |
| 1 |
| 2 |
| 4 |
| 5 |
| 7 |
| 10 |
| 0 |
| 11 |
+—-+

查看t6表结构:

show create table t6;
CREATE TABLE t6 ( id int(11) NOT NULL DEFAULT ‘0’ ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

删除表t6:

drop table t6;
/opt/mysql4/data/test下无t6.frm t6.ibd

在数据库中创建表t6:

CREATE TABLE t6 ( id int(11) NOT NULL DEFAULT ‘0’ ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

丢弃表空间:

mysql> ALTER TABLE t6 DISCARD TABLESPACE;
mysql> select * from t6;
ERROR 1814 (HY000): Tablespace has been discarded for table ‘t6’

此时观察data/test/下只有t6.frm 无t6.ibd

把全备中的表t6复制到data/test/下,并修改属主属组:

cp /tmp/full/2017-05-19_10-34-01/test/t6.ibd /opt/mysql4/data/test
chown mysql:mysql t6.ibd

Copy the t6.ibd files from the backup to the database data directory

此时在数据库中查看t6表数据

mysql> select * from t6;
ERROR 1814 (HY000): Tablespace has been discarded for table ‘t6’

Import tablespace.

mysql> alter table t6 import tablespace;
mysql> select * from t6;
+—-+
| id |
+—-+
| 0 |
| 1 |
| 2 |
| 4 |
| 5 |
| 7 |
| 10 |
| 0 |
| 11 |
+—-+

观察可知 单表t6恢复成功。


myisam存储引擎

直接把表物理文件copy到对应的database,就可以访问。


### 使用 `ibd2sql` 进行 MySQL IBD 文件的数据恢复 #### 准备工作 为了成功使用 `ibd2sql` 工具进行数据恢复,需准备如下环境和文件: - 安装 Python 3.x 及其依赖库。 - 获取目标版本的 MySQL 实例运行权限。 - 备份待恢复的 `.ibd` 文件及其对应的 `.frm` 文件(如果适用)。对于较新版本的 MySQL (8.0+),`.frm` 文件可能不再存在。 #### 执行过程 通过 `ibd2sql` 工具解析并转换 IBD 文件为 SQL 脚本的过程涉及几个关键步骤。下面是一个具体的例子来说明这一流程[^2]。 假设有一个名为 `ddcw_alltype_table` 的,在不同版本之间迁移时遇到问题,则可以按照以下方式操作: 1. **提取 DDL** 对于 MySQL 5.6/5.7 版本中的结构定义(.frm),可以通过 `dbsake frmdump` 命令导出创建该所需的 SQL 语句,并将其导入至更高版本的 MySQL 中作为元数据源: ```bash dbsake frmdump test.frm | mysql -u root -p ``` 2. **调用 ibd2sql 解析 IBD 文件** 接下来利用 `ibd2sql` 将旧版 MySQL 空间(`.ibd`)转成可读取的 SQL 插入语句。这里指定两个路径参数分别指向新版与旧版的同名格的空间文件位置: ```bash python3 main.py \ --sdi-table /your_mysql8_path/ddcw_alltype_table.ibd \ /your_mysql5_path/ddcw_alltype_table.ibd \ --sql --mysql5 ``` 上述命令会生成一系列 INSERT INTO ... VALUES (...) 形式的SQL指令,这些指令可以直接应用于新的数据库环境中完成数据加载。 请注意,当面对非常大尺寸或是已经遭受一定程度物理损伤的 IBD 文件时,整个过程中可能会遭遇性能瓶颈或者是无法完全重建原始记录的情况。因此建议提前做好充分测试以及风险评估[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值