从mysqldump文件中提取某一天某一表格的sql语句

来源:互联网 发布:竹子家具的优缺点 知乎 编辑:程序博客网 时间:2024/06/06 16:38
#!/bin/sh
#################################################################
#输入需要备份的服务器
fwq="MT2TV_2021 MT2TV_2023 MT2TV_2028 MT2TV_2029 MT2TV_2030"
#输入需要备份的日期
date=20161020
#输入需要备份的表
table=title
###############################################################
for i in $fwq 
do


cd ./$i
id=$(ls *$date*.tgz|cut -d'_' -f2-4|cut -d'.' -f1)
ff=data_"$id".sql
[ -f "$ff" ] || tar -zxvf *$date*.tgz
file=`ls data_*$date*.sql`
m=$(cat $file |grep -nE "Table structure for table \`title\`"|cut -d':' -f1)
n=$[$(cat data_20*_20161020_*.sql |grep -nE "ALTER TABLE \`title\` ENABLE KEYS"|cut -d':' -f1)+3]
echo "m=$m,n=$n"
o=`echo $file |cut -d'_' -f2`
echo "o=$o"
outfile=title_"$o"_"$date".sql
echo "outfile=$outfile"
[ -f "$outfile" ] || rm -f ./$outfile
sed -n "$m,${n}p" $file>$outfile




echo "$i 执行完成"
cd ..

done


目的 从某一天的dump文件中,取出某个表的sql创建插入语句
期间遇到的问题
在变量的取值中因为变量的范围*过于宽泛导致变量的取值变多 
从而sed -n 没有取到正确的值 导致文件多次写入,
sed后面的值是一个范围 $m,${n}p 由于$n才是我们想要的变量可以这么表示 


删除某文件夹下面的 数据

find ./  -name *20161025*.sql -exec rm -f {} +

0 0