rub*_*o77 7 mysql bash mysqldump
如何删除mysqldump中包含大量表的一个大表的输出?
我有一个6 GB大的数据库转储,但其中90%只是一个日志表"cache_entries",我在备份中不再需要了.
如何轻松删除转储中的那个位,它描述了大型日志记录表?
我发现了这个:http: //gtowey.blogspot.de/2009/11/restore-single-table-from-mysqldump.html
例:
grep -n 'Table structure' dump.sql
Run Code Online (Sandbox Code Playgroud)
然后例如:
sed -n '40,61 p' dump.sql > t2.sql
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能根据我的需要改变它呢?
Hig*_*ing 14
您可以使用'n,nd'删除某些行.我想在你的情况下,你确实想要有问题的表,但不想要数据?
更改grep命令以包括"转储表的数据":
grep -n 'Table structure\|Dumping data for table' dump.sql 19:-- Table structure for table `t1` 37:-- Dumping data for table `t1` 47:-- Table structure for table `t2` 66:-- Dumping data for table `t2` 76:-- Table structure for table `t3` 96:-- Dumping data for table `t3`
现在,如果你不想要t2的数据,你可以使用:
sed '66,75 d' dump.sql > cleandump.sql
rub*_*o77 11
我找到了这个bash脚本,它将一个数据库的转储拆分为每个表的单独字段,使用csplit(将文件拆分为由上下文行确定的部分):
#!/bin/bash
####
# Split MySQL dump SQL file into one file per table
# based on http://blog.tty.nl/2011/12/28/splitting-a-database-dump
####
if [ $# -ne 1 ] ; then
echo "USAGE $0 DUMP_FILE"
fi
csplit -s -ftable $1 "/-- Table structure for table/" {*}
mv table00 head
for FILE in `ls -1 table*`; do
NAME=`head -n1 $FILE | cut -d$'\x60' -f2`
cat head $FILE > "$NAME.sql"
done
rm head table*
Run Code Online (Sandbox Code Playgroud)
并有点增强: 如何将mysqldump的输出拆分成较小的文件?
一旦你有每个表的单独文件,你可以删除不需要的表,并在需要时将它们粘在一起
cat table* >glued_sqldump.sql