Xtrabackup备份恢复单表

    科技2025-05-24  39

    理论:

    当误删表时、如果是数据量较小的实例,并且有备份,即便是全备,做一次全量恢复,然后单表导出导入,虽然麻烦一点,却也花不了多少时间;如果是数据量大的实例,但分表备份的话,那么直接导入的话也是可以的。 现实中往往是比较残酷的,我们很可能是全量备份,加上增量备份的备份策略,那么这样的代价就比较大了。 本文主要介绍利用 XtraBackup 备份工具来实现单表快速恢复,在紧急数据恢复场景下,用最短的时间来恢复数据,最大程度降低损失。通过 Percona XtraBackup 可以导出任意基于 InnoDB 存储引擎,并且使用独立表空间的表,可以把它们导入到 MySQL 5.6及以上版本 中(源库不要求必须是MySQL 5.6以上,但目标库要求必须)。这只适用于使用独立 .ibd 文件的表,不能导出没有 .ibd 文件的表,所以innodb_file_per_table参数需要开启的。

    情景:

    基础架构临时需要恢复一张单表数据,所属数据库非盘古,无法通过系统进行恢复,只能手动进行恢复,将xtrabackup备份压缩包解压到自己搭建的mysql环境的目录下,将所需表的ibd文件移动到本地Mysql的data目录下,通过舍弃表空间和导入表空间进行恢复,库中验证恢复后的数据后进行mysqldump导出,最后导入到目标库的表中。

    操作:

    1、将XtraBackup备份导入你搭建的Mysql服务机器上。 2、如果已知道表结构,则进入该库中进行创建create table xxx 若不知道表结构则进行mysql-utilities安装:yum install mysql-utilities -y ,之后使用其中的mysqlfrm通过误删表的frm获取表结构再进行创建:mysqlfrm --diagnostic xxx.frm 3、登陆数据库建完表之后,舍弃该表空间:alter table xxx discard tablespace; 4、将所需表的ibd文件移动到Mysql服务的data目录该表的库下,并授予权限chown -R mysql:mysql xxx.ibd 5、登陆库中,载入表空间:alter table xxx import tablespace; 6、检验表中数据是否恢复,后续可能还需要binlog进行完整恢复,恢复后则将数据mysqldump出来导入到目标库表中。

    问题:

    问题1、ERROR 1808 (HY000): Schema mismatch (Table has ROW_TYPE_DYNAMIC row format 解决:alter table xxx ROW_FORMAT=COMPACT;

    Processed: 0.009, SQL: 8