共計 2947 個字符,預計需要花費 8 分鐘才能閱讀完成。
這篇文章主要介紹 mysql 中 delete 誤刪除如何利用 binlog 回滾,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
mysql select * from tet3;
+—-+————-+
| id | dd |
+—-+————-+
| 1 | XX |
| 2 | YY |
| 3 | aaa |
| 4 | 5002301999X |
| 5 | 0000000X |
| 6 | oi80 |
| 7 | 887 |
| 8 | 887 |
| 10 | jju |
+—-+————-+
9 rows in set (0.03 sec)
mysql delete from tet3 where id
Query OK, 6 rows affected (0.03 sec)
mysql select * from tet3;
+—-+——+
| id | dd |
+—-+——+
| 1 | XX |
| 2 | YY |
| 3 | aaa |
+—-+——+
3 rows in set (0.00 sec)
[root@localhost data]# mysqlbinlog –no-defaults –base64-output=decode-rows -v -v db-bin.000016| sed -n /### DELETE FROM `test`.`tet3`/,/COMMIT/p /root/delete.txt
[root@localhost data]# more /root/delete.txt
### DELETE FROM `test`.`tet3`
### WHERE
### @1=4 /* INT meta=0 nullable=0 is_null=0 */
### @2= 5002301999X /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### DELETE FROM `test`.`tet3`
### WHERE
### @1=5 /* INT meta=0 nullable=0 is_null=0 */
### @2= 0000000X /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### DELETE FROM `test`.`tet3`
### WHERE
### @1=6 /* INT meta=0 nullable=0 is_null=0 */
### @2= oi80 /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### DELETE FROM `test`.`tet3`
### WHERE
### @1=7 /* INT meta=0 nullable=0 is_null=0 */
### @2= 887 /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### DELETE FROM `test`.`tet3`
### WHERE
### @1=8 /* INT meta=0 nullable=0 is_null=0 */
### @2= 887 /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### DELETE FROM `test`.`tet3`
### WHERE
### @1=10 /* INT meta=0 nullable=0 is_null=0 */
### @2= jju /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at 3640
#150426 23:17:36 server id 199 end_log_pos 3671 CRC32 0xb946f7f5 Xid = 164
COMMIT/*!*/;
[root@localhost ~]# cat delete.txt | sed -n /###/p | sed s/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g; |sed -r s/(@2.*),/\1;/g | sed s/@[1-9]=//g insert.sql
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# more insert.sql
INSERT INTO `test`.`tet3`
SELECT
4 ,
5002301999X
INSERT INTO `test`.`tet3`
SELECT
5 ,
0000000X
INSERT INTO `test`.`tet3`
SELECT
6 ,
oi80
INSERT INTO `test`.`tet3`
SELECT
7 ,
887
INSERT INTO `test`.`tet3`
SELECT
8 ,
887
INSERT INTO `test`.`tet3`
SELECT
10 ,
jju
以上就是我們需要的回滾 sql 了 … 執行就行了..
命令解釋:
mysqlbinlog –no-defaults –base64-output=decode-rows -v -v db-bin.000016| sed -n /### DELETE FROM `test`.`tet3`/,/COMMIT/p /root/delete.txt
mysqlbinlog –no-defaults –base64-output=decode-rows -v -v db-bin.000016
這屬于 mysqlbinlog 命令參數 …
–no-defaults 阻止 mysqlbinlog 工具從任何配置文件讀取參數 (保證密碼安全)
–base64-output=decode-rows 顯示出 row 模式帶來的 sql 變更
-v -v 采用二進制日志文件方式查看
sed -n /### DELETE FROM `test`.`tet3`/,/COMMIT/p
打印從 ### DELETE FROm `test`.`tet3` 開始到 COMMIT 結束的內容 …
cat delete.txt | sed -n /###/p | sed s/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g; |sed -r s/(@2.*),/\1;/g | sed s/@[1-9]=//g insert.sql
sed -n /###/p
打印 ### 開頭的行
sed s/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;
分開解讀: s/### //g;s/\/\*.*/,/g; 這部分是把 ### 和 /*..*/ 去除掉;
s/DELETE FROM/INSERT INTO/g; 這部分是吧 delete from 換成 insert into;
s/WHERE/SELECT/g; 這部分是吧 where 換成 select;
|sed -r s/(@2.*),/\1;/g
- r 是正則表達式, 意思是在 @2 開頭的一行末尾加一個分號.
sed s/@[1-9]=//g
這個就簡單了.. 就是將 @1-@9 的去除. 當然本例中只有 @1 和 @2.
以上是“mysql 中 delete 誤刪除如何利用 binlog 回滾”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!