匿名用户MySQL 怎么根据已有的记录逆向生成insert语句?
给你举个例子。
我以前做的。
mysqlbinlog --start-datetime='2018-08-21 12:50:00' --stop-datetime='2018-08-21 13:05:00' --base64-output=decode-rows -v -v /var/lib/mysql/mysql-bin.000007 |sed -n '/### DELETE FROM `x`.`a`/,/COMMIT/p' >/setup/delete.txt
#180821 12:55:03 server id 1 end_log_pos 18532 CRC32 0x3cd1c9c1 Table_map: `x`.`a` mapped to number 131
# at 18532
#180821 12:55:03 server id 1 end_log_pos 18582 CRC32 0xd49a6ad0 Delete_rows: table id 131 flags: STMT_END_F
### DELETE FROM `x`.`a`
### WHERE
### @1=1
### DELETE FROM `x`.`a`
### WHERE
### @1=2
### DELETE FROM `x`.`a`
### WHERE
### @1=3
# at 18582
#180821 12:55:03 server id 1 end_log_pos 18613 CRC32 0xe3a62189 Xid = 2077
COMMIT/*!*/;
DELIMITER ;
cat /setup/delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/values (/g;' | sed -r 's/(@1.*),/\1);/g' | sed 's/@[1]=//g' > /setup/test.txt
cat /setup/delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/values (/g;' | sed -r 's/(@2.*),/\1);/g' | sed 's/@[1-2]=//g' > /setup/test.txt
mysql> select * from a;
Empty set (0.00 sec)
mysql> source /setup/test.txt
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
mysql> select * from a;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
+------+------+
3 rows in set (0.00 sec)
评论
有用 0
墨值悬赏

