lamess / 处理大型MySQL备份文件实战

Created Mon, 24 Mar 2025 15:28:58 +0800 Modified Mon, 24 Mar 2025 16:14:49 +0800
369 Words

背景与问题场景

在某次数据库维护任务中,我获得了一个超过10GB的MySQL数据库的dump文件(.sql格式)。尝试直接还原时遇到了以下问题:

  1. 执行耗时过长:完整还原需要时间太长,超出维护窗口时间
  2. 业务需求错位:开发环境仅需数据表结构+基础数据,而备份包含大量历史业务数据

处理方案

数据分流

通过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

这样可以快速决策需要过滤的数据表。