若直接完整还原全量备份,效率极低。目标表可能仅几十 MB,而库内其余大表动辄数十 GB 甚至上百 GB,完整导入会耗费大量时间、占用服务器 IO 资源。此时最优方案是从完整备份文件中单独抽取出目标表的建表语句与插入数据语句,仅对该表执行恢复操作。
线上环境中一台 MySQL 实例通常承载多个业务数据库,常规运维均会执行全库统一备份,所有库表内容整合至单个备份 SQL。但偶发场景只需恢复单个数据库,或是仅还原某一张数据表,下面结合实操案例讲解完整处理流程。
现有完整备份文件:fdcsqlmysql-2018_11_30-03_00_01.sql,文件包含实例全部数据表,本次需求仅恢复
fdc_document单表数据。一、提取目标表建表语句
借助 sed 文本处理命令,精准过滤备份文件中对应数据表的建表结构代码。
通用语法:
bash
运行
sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `目标表名`/!d;q' 完整备份文件名.sql
适配本次需求执行命令:
bash
运行
sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `fdc_document`/!d;q' fdcsqlmysql-2018_11_30-03_00_01.sql
执行后输出完整表结构代码,包含删表前置语句、字符集配置、字段定义、索引配置等完整内容示例:
sql
DROP TABLE IF EXISTS `fdc_document`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `fdc_document` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '文档ID',
`uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
`name` char(40) NOT NULL DEFAULT '' COMMENT '标识',
...
`entrust_rule` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '经纪人点击是否和用户签委托协议:1为有;0为没有',
`audit` tinyint(3) NOT NULL DEFAULT '0' COMMENT '审核:0为未审核;1为图片已审核;2为描述已审核;3为图片和描述都已审核',
PRIMARY KEY (`id`),
KEY `idx_area_house` (`partition`,`category_id`,`status`,`is_off`) USING BTREE,
KEY `idx_model_house` (`model_id`,`status`,`is_off`) USING BTREE,
KEY `idx_community_house` (`community_id`,`estate`,`status`,`is_off`) USING BTREE,
KEY `idx_uid_house` (`uid`,`model_id`,`is_off`) USING BTREE,
KEY `idx_pid_house` (`id`,`pid`,`status`,`is_off`) USING BTREE,
KEY `is_video` (`is_video`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=211138 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
二、提取目标表业务数据
通过 grep 匹配 INSERT 插入语句,单独导出该表全部业务数据至独立 SQL 文件。
通用语法:
bash
运行
grep 'INSERT INTO`目标表名`' 完整备份文件.sql > 单表数据文件.sql
本次实操执行指令:
bash
运行
grep 'INSERT INTO`fdc_document`' fdcsqlmysql-2018_11_30-03_00_01.sql > document.sql
命令执行完成后,目录下生成 document.sql 文件,内部仅存放
fdc_document表全部插入语句,后续可单独导入恢复数据。三、数据表恢复操作步骤
1. 初始化数据库与数据表
先登录 MySQL 创建对应业务数据库,再将上一步提取到的建表 SQL 执行,完成
fdc_document数据表结构初始化。2. 导入单表业务数据
进入目标数据库,使用 source 命令加载独立数据文件完成数据还原:
sql
MySQL [document]> source /data/backup/mysql/document.sql
执行完毕后,单表数据恢复流程全部完成。
© 版权声明
本文刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等部门来源于互联网,版权均归原作者所有!本网站提供的内容服务于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
联系信息:邮箱aoxolcom@163.com或见网站底部。
联系信息:邮箱aoxolcom@163.com或见网站底部。
THE END















请登录后发表评论
注册
社交帐号登录