如何从MySQL备份文件中删除空表

如何从MySQL备份文件中删除空表,mysql,backup,awk,Mysql,Backup,Awk,我有多个大型MySQL备份文件,它们都来自不同的数据库,具有不同的模式。我想将备份加载到EDW中,但不想加载空表 现在我正在使用AWK在备份文件上删除空表,但我想知道是否有更好的方法来完成此操作 如果有人感兴趣,这是我的AWK脚本: 编辑:我今天注意到这个脚本有一些问题,如果你想实际使用它,请小心。您的输出可能是错误的。。。我会在做出更改时发布这些更改 我想不出mysqldump中有任何选项可以跳过备份中的空表。也许是-where选项,但不确定你能做些什么。第二个脚本中的后期处理并没有那么糟糕。

我有多个大型MySQL备份文件,它们都来自不同的数据库,具有不同的模式。我想将备份加载到EDW中,但不想加载空表

现在我正在使用AWK在备份文件上删除空表,但我想知道是否有更好的方法来完成此操作

如果有人感兴趣,这是我的AWK脚本:

编辑:我今天注意到这个脚本有一些问题,如果你想实际使用它,请小心。您的输出可能是错误的。。。我会在做出更改时发布这些更改


我想不出mysqldump中有任何选项可以跳过备份中的空表。也许是-where选项,但不确定你能做些什么。第二个脚本中的后期处理并没有那么糟糕。

使用regex和perl一行程序。它通过匹配注释标题+空白+下一标题的开始来工作。一个用于有序转储,另一个用于非有序转储

perl -0777 -pi -e 's/--\s*-- Dumping data for table \`\w+\`\s*--\s*-- ORDER BY\:  [^\n]+\s+(?=--)//g' "dump.sql"
perl -0777 -pi -e 's/--\s*-- Dumping data for table \`\w+\`\s*--\n(?!--)\s*(?=--)//g' "dump.sql"

显示输入文件的示例。您想删除或显示什么,并显示所需的输出您可以加载整个转储文件,然后删除任何空表吗?mysqldump文件的后期处理非常棘手和脆弱:新版本经常会更改表定义周围的内容,而您的脚本可能会错过这些内容。
perl -0777 -pi -e 's/--\s*-- Dumping data for table \`\w+\`\s*--\s*-- ORDER BY\:  [^\n]+\s+(?=--)//g' "dump.sql"
perl -0777 -pi -e 's/--\s*-- Dumping data for table \`\w+\`\s*--\n(?!--)\s*(?=--)//g' "dump.sql"