SHELL脚本提取binlog delete语句 供恢复数据

binlog日志 如下:
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 120
#160111 16:37:29 server id 333336  end_log_pos 195 CRC32 0x5759daa6     Query   thread_id=6     exec_time=0     error_code=0
SET TIMESTAMP=1452587849/*!*/;
SET @@session.pseudo_thread_id=6/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1073741824/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 195
#160111 16:37:29 server id 333336  end_log_pos 250 CRC32 0x6c642807     Table_map: `gaoquan`.`t1` mapped to number 70
# at 250
#160111 16:37:29 server id 333336  end_log_pos 348 CRC32 0xde1ef5e7     Delete_rows: table id 70 flags: STMT_END_F
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=1
###   @2=‘gaoquan‘
###   @3=22
###   @4=‘male‘
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=2
###   @2=‘son‘
###   @3=22
###   @4=‘male‘
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=3
###   @2=‘gaoquan1‘
###   @3=32
###   @4=‘male‘
# at 348
#160111 16:37:29 server id 333336  end_log_pos 379 CRC32 0x05ee85fb     Xid = 52
COMMIT/*!*/;
# at 379
#160111 16:37:32 server id 333336  end_log_pos 426 CRC32 0x8649f4ea     Rotate to mysql-bin.000006  pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 120
#160112 16:37:29 server id 333336  end_log_pos 195 CRC32 0x5759daa6     Query   thread_id=6     exec_time=0     error_code=0
SET TIMESTAMP=1452587849/*!*/;
SET @@session.pseudo_thread_id=6/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1073741824/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 195
#160112 16:37:29 server id 333336  end_log_pos 250 CRC32 0x6c642807     Table_map: `gaoquan`.`t1` mapped to number 70
# at 250
#160112 16:37:29 server id 333336  end_log_pos 348 CRC32 0xde1ef5e7     Delete_rows: table id 70 flags: STMT_END_F
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=1
###   @2=‘gaoquan‘
###   @3=22
###   @4=‘male‘
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=2
###   @2=‘son‘
###   @3=22
###   @4=‘male‘
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=3
###   @2=‘gaoquan1‘
###   @3=32
###   @4=‘male‘
# at 348
#160112 16:37:29 server id 333336  end_log_pos 379 CRC32 0x05ee85fb     Xid = 52
COMMIT/*!*/;
# at 379
#160112 16:37:32 server id 333336  end_log_pos 426 CRC32 0x8649f4ea     Rotate to mysql-bin.000006  pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 120
#160113 16:37:29 server id 333336  end_log_pos 195 CRC32 0x5759daa6     Query   thread_id=6     exec_time=0     error_code=0
SET TIMESTAMP=1452587849/*!*/;
SET @@session.pseudo_thread_id=6/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1073741824/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 195
#160113 16:37:29 server id 333336  end_log_pos 250 CRC32 0x6c642807     Table_map: `gaoquan`.`t1` mapped to number 70
# at 250
#160113 16:37:29 server id 333336  end_log_pos 348 CRC32 0xde1ef5e7     Delete_rows: table id 70 flags: STMT_END_F
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=1
###   @2=‘gaoquan‘
###   @3=22
###   @4=‘male‘
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=2
###   @2=‘son‘
###   @3=22
###   @4=‘male‘
### DELETE FROM `gaoquan`.`t1`
### WHERE
###   @1=3
###   @2=‘gaoquan1‘
###   @3=32
###   @4=‘male‘
# at 348
#160113 16:37:29 server id 333336  end_log_pos 379 CRC32 0x05ee85fb     Xid = 52
COMMIT/*!*/;
# at 379
#160113 16:37:32 server id 333336  end_log_pos 426 CRC32 0x8649f4ea     Rotate to mysql-bin.000006  pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
 
要求:
把binlog日志 中2016年1月12日的delete语句提取出来 供恢复数据
 
脚本如下:
#!/bin/bash

#bl表列数 #语句yj
bl=4
yj=DELETE
zs1=`awk ‘/#160112/,/#160113/ {print $0}‘ /tmp/delete|awk ‘"/$yj/",/# at/ {print $0}‘|grep ^###|grep "@"|cut -d"=" -f2`
zs2=`echo $zs1|awk ‘{print NF}‘`
zt=`echo "$zs2/$bl"|bc`
hs=0

databa=gz
tab=wubx
ztt=$(($zt+0))
ii=0

a1=1
a2=2
a3=3
a4=4
  while [[ $ii -lt $ztt ]];do
l1=`echo $zs1|awk ‘{print $‘"$a1"‘}‘`
l2=`echo $zs1|awk ‘{print $‘"$a2"‘}‘`
l3=`echo $zs1|awk ‘{print $‘"$a3"‘}‘`
l4=`echo $zs1|awk ‘{print $‘"$a4"‘}‘`
echo "use $databa;insert into $tab values($l1,$l2,$l3,$l4)" >>hf
  
a1=$(($a1+$bl))
a2=$(($a2+$bl))
a3=$(($a3+$bl))
a4=$(($a4+$bl))

ii=$(($ii+1));
  done
 
运行结果:
[email protected]:~> sh mysql.sh && cat hf
use gz;insert into wubx values(1,‘gaoquan‘,22,‘male‘)
use gz;insert into wubx values(2,‘son‘,22,‘male‘)
use gz;insert into wubx values(3,‘gaoquan1‘,32,‘male‘)

总结:初步写一个提取delete语句脚本,还有需要改进的地方,欢迎提出意见,共同探讨。

时间: 2024-07-28 21:05:28

SHELL脚本提取binlog delete语句 供恢复数据的相关文章

Shell脚本中执行sql语句操作

这篇文章主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中.命令行调用单独的SQL文件.使用管道符调用SQL文件等方法,需要的朋友可以参考下 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到sh

Shell脚本中执行mysql语句

对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到shell脚本文件中 --演示环境 [[email protected] ~]# more /etc/issue CentOS release 5.9 (Final) Kernel \r on an \m   [e

shell脚本循环执行mysql语句

参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: 1).写个sql文件test.sql:use movie_recommendation;select distinct movie_id from T_user_movie_rating_map; 2).在终端输入mysql -uroot -p123456 -e < test.sql > movi

shell脚本解析5----循环语句

一.for循环 for var in [ list ] do #code block done $var是循环控制变量,[list]是var需要遍历的一个集合,do/done对包含了循环体.如果do和for被写在同一行,必须在do前面加上“;”,如:for $var in [list]; do 例如: #!/bin/bash for day in Sun Mon Tue Wed Thu Fri Sat do echo $day done 执行结果: 如果列表被包含在一对括号中,则被认为是一个元素

shell脚本解析4----分支语句(if)

一.条件语句 1. if [expression] then #code block fi 2. if [expression] then #code block else #code block fi 3. if [expression] then #code block else if [expression]    #该处可以替换成elif [expression] then #code block else #code block fi fi 二.条件语句中常用的比较 比较操作    

shell脚本中执行mysql语句的方法

方法一:使用文件标签EOF重定向的方法的: #!/bin/bash  user=root  pass=123456  db=mysql  tablename=user  mysql -s --line-numbers -f -u$user -p$pass -D $db --delimiter=";" -E<  --SELECT host,user from $tablename order by 1;  SELECT host,user from $tablename order

Linux Shell脚本 几种循环语句创建用户的方法

大家好,我是孤云暮雨,今天给大家带来的是"Linux Shell脚本 几种循环语句创建用户的方法" 添加user1-user20用户 for循环: #!/bin/bash for i in {1..20} do useradd user$i echo "user$i Users to add success" done for循环(C风格): #!/bin/bash for ((i=1;i<=20;i++)) do useradd user$i &&a

Shell脚本之if条件语句

条件测试 test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值. 格式一:test 条件表达式格式二:[ 条件表达式 ] (注意中括号与表达式间有空格) 文件测试: 格式:[ 操作符 文件或目录 ] (注意中括号与表达式间有空格) 常用的测试操作符: -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否为文件(File) -r:测试当前用户是否有权限读取(Read) -w:测试当前用户是否有权限写入(Writ

在shell脚本中调用sql语句

查询员工信息 -S:静默登录 [[email protected] shells]$ cat shell1.sh #!/bin/bash #查询员工信息 sqlplus -S /nolog <<EOF conn scott/scott set feedback off set linesize 300 set pagesize 100 col empno for 99999 col ename for a12 col mgr for 9999 col hiredate for a20 col