Mysql使用binlog恢複數據解決誤操作問題的兩種方法

来源:https://www.cnblogs.com/DataArt/archive/2018/10/29/9873256.html
-Advertisement-
Play Games

1. 基礎知識 安裝mysql5.6資料庫Mysql binlog初步理解 2. 配置mysql 開啟binlog、修改binlog模式為Row Level模式 修改mysql配置文件,在[mysqld]下增加以下內容 3. 重啟mysql資料庫 binlog開啟 生成文件/var/lib/mysq ...


為保證沒有其他參數配置影響,重新安裝配置了一臺最小化安裝的CentOS7虛擬機

1. 基礎知識


安裝mysql5.6資料庫
Mysql binlog初步理解

2. 配置mysql 開啟binlog、修改binlog模式為Row Level模式


[root@localhost ~]# vi /etc/my.cnf


修改mysql配置文件,在[mysqld]下增加以下內容

# 註釋: 開啟binlog 文件名以mysql-bin開頭
log-bin = mysql-bin
# 註釋: 備份恢復模式不需要開啟Row模式 閃回需要開啟Row模式
binlog_format=”ROW”

3. 重啟mysql資料庫 binlog開啟 生成文件/var/lib/mysql/mysql-bin.000001

service mysqld restart

登錄資料庫 然後創建測試資料庫demo和測試表user

mysql> create database demo;
Query OK, 1 row affected (0.00 sec)
mysql> use demo;
Database changed
mysql> CREATE TABLE user ( id int(8) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, type int(8) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.01 sec)


準備完畢,刷新掉binlog文件,此時binlog文件mysql-bin.000001結束,進入mysql-bin.000002記錄

mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)
備份資料庫
[root@localhost ~]# mysqldump -u root -p –databases demo > db_demo_bak.sql

4. 使用備份+binlog記錄方式回滾資料庫

1.進入資料庫 先插入2條測試數據
mysql> insert into user (id,name,type) value (10001,’A’,’1’);
Query OK, 1 row affected (0.00 sec)
mysql> insert into user (id,name,type) value (10002,’B’,’1’);
Query OK, 1 row affected (0.00 sec)
2.查看數據
mysql> select * from user;
+——-+——+——+
| id | name | type |
+——-+——+——+
| 10001 | A | 1 |
| 10002 | B | 1 |
+——-+——+——+
2 rows in set (0.00 sec)
3.模擬誤操作 update修改資料庫數據
mysql> update user set name = ‘C’;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from user;
+——-+——+——+
| id | name | type |
+——-+——+——+
| 10001 | C | 1 |
| 10002 | C | 1 |
+——-+——+——+
2 rows in set (0.00 sec)
4.user表的name欄位被誤操作修改,抓緊刷新掉binlog文件,mysql-bin.000002結束,後續操作進入mysql-bin.000003
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
5.此時,查看一下mysql的binlog文件
[root@localhost ~]# ls /var/lib/mysql 
auto.cnf ibdata1 ib_logfile1 mysql-bin.000001 mysql-bin.000003 mysql.sock
demo ib_logfile0 mysql mysql-bin.000002 mysql-bin.index performance_schema

那麼,mysql-bin.000002文件記錄了從備份到誤操作的所有資料庫執行,現在我們需要恢復掉被update誤操作掉的數據
6.先使用備份恢複數據庫 此時表user沒有數據
mysql> user demo;
mysql> drop table user;
mysql> source /root/db_demo_bak.sql
mysql> select * from user;
Empty set (0.00 sec)
7.查看mysql-bin.000002記錄的操作,查看各操作的Pos和End_log_pos
mysql> show binlog events in ‘mysql-bin.000002’;
+——————+—–+————-+———–+————-+—————————————+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+——————+—–+————-+———–+————-+—————————————+
| mysql-bin.000002 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.39-log, Binlogver: 4 |
| mysql-bin.000002 | 120 | Query | 1 | 192 | BEGIN |
| mysql-bin.000002 | 192 | Table_map | 1 | 243 | table_id: 72 (demo.user) |
| mysql-bin.000002 | 243 | Write_rows | 1 | 289 | table_id: 72 flags: STMT_END_F |
| mysql-bin.000002 | 289 | Xid | 1 | 320 | COMMIT / xid=147 / |
| mysql-bin.000002 | 320 | Query | 1 | 392 | BEGIN |
| mysql-bin.000002 | 392 | Table_map | 1 | 443 | table_id: 72 (demo.user) |
| mysql-bin.000002 | 443 | Write_rows | 1 | 489 | table_id: 72 flags: STMT_END_F |
| mysql-bin.000002 | 489 | Xid | 1 | 520 | COMMIT / xid=148 / |
| mysql-bin.000002 | 520 | Query | 1 | 592 | BEGIN |
| mysql-bin.000002 | 592 | Table_map | 1 | 643 | table_id: 72 (demo.user) |
| mysql-bin.000002 | 643 | Update_rows | 1 | 723 | table_id: 72 flags: STMT_END_F|
| mysql-bin.000002 | 723 | Xid | 1 | 754 | COMMIT / xid=149 / |
| mysql-bin.000002 | 754 | Rotate | 1 | 801 | mysql-bin.000003;pos=4 |
+——————+—–+————-+———–+————-+—————————————+
14 rows in set (0.00 sec)
可以看出

120 - 320 第一次insert
320 - 520 第二次insert
520 - 754 誤操作update
8.使用mysqlbinlog工具恢復insert操作 120 - 520
[root@localhost ~]# mysqlbinlog –start-position=120 –stop-position=520 -database=demo /var/lib/mysql/mysql-bin.000003 | /usr/bin/mysql -u root -p mima666 -v demo

mysqlbinlog的詳細使用方法參看官方文檔 https://dev.mysql.com/doc

9.查看下user表數據
mysql> select * from user;
+——-+——+——+
| id | name | type |
+——-+——+——+
| 10001 | A | 1 |
| 10002 | B | 1 |
+——-+——+——+
2 rows in set (0.00 sec)

Ok,數據恢覆成功

5. 使用binlog+MyFlash閃回方式回滾資料庫


參考美團的開源項目MyFlash
MyFlash-gitee MyFlash-github


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 假設遠程伺服器IP地址為 192.168.1.100 1.從伺服器複製文件到本地: scp [email protected]:/data/test.txt /home/myfile/ [email protected] root是目標伺服器(有你需要拷貝文件的伺服器)的用戶名,192.168. ...
  • lvs: Linux Virtual Server l4:四層交換;四層路由; 根據請求報文的目標IP和PORT將其轉發至後端主機集群中的某一臺主機(根據挑選演算法); netfilter: PREROUTING --> INPUT PREROUTING --> FORWARD --> POSTROU ...
  • 概念 簡稱brew,是Mac OSX上的軟體包管理工具,能在Mac中方便的安裝軟體或者卸載軟體,相當於Red hat的yum、Ubuntu的apt get。 安裝命令 ruby e "$(curl fsSL "https://raw.githubusercontent.com/Homebrew/in ...
  • #本文並非原創,屬於本人學習中的記錄筆記或是轉存筆記,如果涉及到哪位高人的創作權益,敬請海涵! Vim 是一個上古神器,本篇文章主要持續總結使用 Vim 的過程中不得不瞭解的一些指令和註意事項,以及持續分享一個前端工作者不得不安裝的一些插件,而關於 Vim 的簡介,主題的選擇,以及為何使用 vim- ...
  • 本章主要講解了section header的定義,各欄位含義和可能的取值。然後介紹了系統預定義的一些section名稱。最後我們綜合運用第二章和第三章的知識,做了一個讀取section names的練習。 ...
  • Redis集群實現了較為完善的高可用方案。本文將詳細介紹集群,主要內容包括:集群的作用;集群的搭建以及設計方案;集群的基本原理;客戶端訪問集群的方法;以及其他實踐中需要的集群知識。 ...
  • 《大數據時代》是國外大數據研究的先河之作,本書作者維克托•邁爾•舍恩伯格被譽為“大數據商業應用第一人”,擁有在哈佛大學、牛津大學、耶魯大學和新加坡國立大學等多個互聯網研究重鎮任教的經歷,早在2010年就在《經濟學人》上發佈了長達14頁對大數據應用的前瞻性研究。 維克托•邁爾•舍恩伯格在書中前瞻性地指 ...
  • 下載mysql安裝程式 官方下載地址:http://dev.mysql.com/downloads/mysql/ 解壓下載文件,如圖 其中data和my.ini文件需要自己創建 my.ini 文件配置如下: 配置環境變數 電腦 屬性 高級系統屬性 環境變數 初始化data目錄 以管理員命令運行cmd ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...