背景与问题场景
在某次数据库维护任务中,我获得了一个超过10GB的MySQL数据库的dump文件(.sql格式)。尝试直接还原时遇到了以下问题:
- 执行耗时过长:完整还原需要时间太长,超出维护窗口时间
- 业务需求错位:开发环境仅需数据表结构+基础数据,而备份包含大量历史业务数据
处理方案
数据分流
通过grep命令,先识别区分了数据库中重要的数据和非必要的数据。接下来将非必要的数据从.sql文件里面排除掉,留下其余文本。
这里直接将数据量较大的几张表排除掉。
awk '/^INSERT INTO `(table1|table2|table3)[^`]*`/ { print > "excluded.sql"; next } { print }' original.sql > cleaned.sql
这样就得到了清理后的文件,可以愉快还原。
后续处理
等待业务空闲期按需将前面过滤掉的INSERT语句进行执行即可。
流程优化
在还原之前,可以先筛查整个.sql文件,根据INSERT语句的次数检查数据量大小。
grep -oP '^INSERT INTO `\K[^`]+' original.sql | sort | uniq -c | sort -nr
这样可以快速决策需要过滤的数据表。