MySQL—使用binlog日志恢復數據

一、binlog日志恢復數據簡介

在 MySQL 中,使用二進制日志(binlog)恢復數據是一種常見的用于故障恢復或數據找回的方法。以下是詳細的使用步驟:

  1. 確認 binlog 已啟用:首先需要確認 MySQL 服務器已經啟用了二進制日志功能。可以通過查看 MySQL 的配置文件(通常是?my.cnf?或?my.ini),檢查是否存在?log-bin?配置項。如果配置文件中存在類似?log-bin=mysql-bin?的配置,就表示已經啟用了二進制日志。也可以在 MySQL 命令行中執行?SHOW VARIABLES LIKE 'log_bin';?命令,若?Value?為?ON,則說明已啟用。
  2. 找到需要的 binlog 文件:二進制日志文件默認會以?mysql-bin.xxxxxx?的形式命名,xxxxxx?是一個數字編號。可以通過?SHOW BINARY LOGS;?命令查看所有的二進制日志文件列表,確定需要用于恢復數據的日志文件范圍。如果知道數據丟失或誤操作的大致時間點,可以使用?SHOW BINLOG EVENTS IN '日志文件名';?命令查看指定日志文件中的事件,找到對應的操作記錄。
  3. 準備恢復環境:為了恢復數據,最好在一個與原生產環境相同或相似的測試環境中進行操作。可以使用備份的數據文件先恢復到一個時間點,然后再通過 binlog 來補充后續的操作。
  4. 使用 mysqlbinlog 工具解析 binlogmysqlbinlog?是 MySQL 提供的用于解析二進制日志的工具。可以使用以下命令來解析指定的二進制日志文件:
mysqlbinlog [選項] 二進制日志文件名

例如,mysqlbinlog --no-defaults mysql-bin.000001?可以解析?mysql-bin.000001?這個日志文件。常用的選項包括?--start-datetime?和?--stop-datetime?來指定時間范圍,--start-position?和?--stop-position?來指定日志位置范圍。例如,只恢復某個時間段內的操作,可以使用?mysqlbinlog --start-datetime='2024-01-01 00:00:00' --stop-datetime='2024-01-02 00:00:00' mysql-bin.000001?。
5.?將解析后的內容應用到數據庫:將?mysqlbinlog?解析后的 SQL 語句應用到目標數據庫中,可以將解析結果通過管道直接輸入到?mysql?客戶端來執行。例如:

mysqlbinlog [選項] 二進制日志文件名 | mysql -u用戶名 -p密碼

假設用戶名是?root,密碼是?123456,要恢復?mysql-bin.000001?這個日志文件中的數據,可以執行?mysqlbinlog --no-defaults mysql-bin.000001 | mysql -uroot -p123456?。

在使用 binlog 恢復數據時,要特別小心,因為錯誤的操作可能會導致數據進一步丟失或損壞。在正式恢復生產環境數據之前,務必在測試環境中進行充分的測試。

二、使用binlog日志恢復數據的步驟

1、前提

在數據庫的配置文件中一定要開啟binlog日志,否則不會有binlog日志產生。

[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
server-id = 1

?

2、可選擇的binlog日志配置項

  • 添加配置項:在[mysqld]部分添加或修改以下配置內容。
    • server-id=1:每個 MySQL 服務器必須有一個唯一的 ID,一般設置為正整數。
    • log_bin=mysql-bin:指定開啟 binlog 日志,并設置日志文件的基礎名,默認存儲在 MySQL 的數據目錄下,也可指定絕對路徑,如log_bin=/data/mysql/mysql-bin
    • binlog_format=ROW:設置 binlog 的格式,可選項有ROW(記錄每一行數據的修改細節)、STATEMENT(記錄 SQL 語句本身)、MIXED(混合模式),推薦使用ROW格式。
    • expire_logs_days=7:設置 binlog 日志自動過期的天數,到期后會自動刪除。
[mysqld]
binlog_format = ROW

STATEMENT格式記錄了語句的原文,RO格式記錄了每行數據的變化,MIXED格式在某些情況下會記錄為STATEMENT,在其他情況下會記錄為ROW。

確保配置后重啟MySQL服務以使更改生效。

注意:在生產環境中更改這些配置需要謹慎,因為它可能會影響數據庫的性能和復制

3、使用命令行在系統中進行操作

  • 登錄 MySQL:使用命令mysql -u root -p,輸入密碼登錄到 MySQL 數據庫3。
  • 執行命令啟用 binlog3
    • SET GLOBAL binlog_format=ROW;:設置 binlog 格式為ROW,也可根據需求設置為STATEMENTMIXED
    • SET GLOBAL binlog-do-db=<要記錄更改的數據庫>;:指定要記錄更改的數據庫,如果要記錄多個數據庫,數據庫之間用逗號分隔。
    • SET GLOBAL binlog-ignore-db=<要忽略的數據庫>;:指定要忽略的數據庫,多個數據庫之間用逗號分隔。
  • 保存設置:執行COMMIT;保存設置3。

配置完成后,可以使用show variables like 'log_bin%';命令查看 binlog 是否已啟用。如果ValueON,則表示 binlog 已經成功開啟。

4、確認binlog日志是否開啟

確認binlog已啟用:
SHOW VARIABLES LIKE 'log_bin';查看當前的日志文件:
SHOW BINARY LOGS;查看binlog的格式(可選):
SHOW VARIABLES LIKE 'binlog_format';

5、使用mysqlbinlog工具查看binlog二進制日志文件

三、數據備份和恢復步驟

?步驟一:在sql中插入數據

步驟二:備份數據(準確定位到需要恢復數據的時間點)

模擬生產每天數據備份的的數據

mysqldump -ustc -pppp --master-data=2 --single-transaction -S /opt/sumscope/mysql/mysql.sock test stc > stc.sql

備份命令要帶上 --master-data=2 --single-transaction

在 MySQL 中,--master-data=2?和?--single-transaction?是?mysqldump?命令常用的參數,它們各自有不同的作用,以下為你詳細介紹:

--master-data=2?參數詳解
  • 作用:該參數用于在執行?mysqldump?備份時,記錄主服務器的二進制日志文件名(File)和位置(Position)信息到備份文件中。這對于后續搭建主從復制環境非常重要,因為從服務器需要知道從主服務器的哪個二進制日志位置開始復制數據。當?--master-data?設置為?2?時,會在備份文件中添加一個?CHANGE MASTER TO?語句,其中包含了主服務器的二進制日志文件名和位置信息。
  • 示例:假設執行?mysqldump --master-data=2 -u root -p mydatabase > backup.sql?命令來備份名為?mydatabase?的數據庫。備份完成后,在?backup.sql?文件中會看到類似以下的內容(部分示例):
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=459;
--
-- Current Database: `mydatabase`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mydatabase` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `mydatabase`;
--
-- Table structure for table `users`
--
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `users`
--
LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` (`id`, `name`) VALUES (1,'John');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;

  • 與?--master-data=1?的區別--master-data=1?也會記錄主服務器的二進制日志信息,但它會在執行?mysqldump?時,對主服務器加全局讀鎖(FLUSH TABLES WITH READ LOCK),直到備份完成,這期間主服務器無法進行寫入操作,會影響數據庫的可用性。而?--master-data=2?不會加全局讀鎖,它是通過在事務中獲取二進制日志位置信息來實現的,對數據庫的影響較小。
--single-transaction?參數詳解
  • 作用:該參數主要用于在 InnoDB 存儲引擎的數據庫上進行一致性備份。它會在備份開始時開啟一個事務,然后在這個事務中執行?SELECT?語句來獲取數據,由于 InnoDB 的 MVCC(多版本并發控制)機制,在事務執行期間,其他事務對數據的修改不會影響到本次備份的數據讀取,從而保證了備份數據的一致性。在備份過程中,不會對表加鎖(除了在獲取二進制日志位置時可能會有短暫的鎖),所以可以在數據庫正常運行時進行備份,不影響業務的寫入操作。
  • 適用場景:適用于需要在不影響數據庫正常運行的情況下進行在線備份的場景,特別是對于寫入頻繁的 InnoDB 數據庫。例如,在一個電商網站的數據庫中,使用?--single-transaction?參數可以在不中斷訂單處理等寫入操作的同時,獲取到一個一致的數據庫備份。
  • 注意事項--single-transaction?只對 InnoDB 存儲引擎有效,對于其他存儲引擎(如 MyISAM)不起作用。因為 MyISAM 表不支持事務,所以在備份 MyISAM 表時,可能會出現數據不一致的情況。

--master-data=2?主要用于記錄主服務器的二進制日志信息以便后續搭建主從復制,--single-transaction?則用于在不影響數據庫正常寫入的情況下實現 InnoDB 數據庫的一致性備份。

--single-transactionCreates a consistent snapshot by dumping all tables in asingle transaction. Works ONLY for tables stored instorage engines which support multiversioning (currentlyonly InnoDB does); the dump is NOT guaranteed to beconsistent for other storage engines. While a--single-transaction dump is in process, to ensure avalid dump file (correct table contents and binary logposition), no other connection should use the followingstatements: ALTER TABLE, DROP TABLE, RENAME TABLE,TRUNCATE TABLE, as consistent snapshot is not isolatedfrom them. Option automatically turns off --lock-tables.--single-transaction選項在執行mysqldump命令時,會將隔離級別設置為
REPEATABLE READ,并開啟一個事務。這樣,在備份過程中讀取的數據是一個邏輯一致的快照,即使在備份過程中有其他會話對數據進行修改,
也不會影響到備份的數據。這種方式避免了在備份大型數據庫時出現長時間的鎖定或阻塞現象,對生產環境的業務操作影響較小?。--master-data=2
該選項將二進制日志的位置和文件名寫入到輸出中。該選項要求有RELOAD權限,并且必須啟用二進制日志。如果該選項值等于1,
位置和文件名被寫入CHANGE MASTER語句形式的轉儲輸出,如果你使用該SQL轉儲主服務器以設置從服務器,從服務器從主服務器二進制日志的正確位置開始。
如果選項值等于2,CHANGE MASTER語句被寫成SQL注釋。如果value被省略,這是默認動作。

步驟三:在向數據庫中插入數據模擬備份到誤刪除中間的時間段還有其他數據入庫?

步驟四:假設不小心刪除了數據

?

步驟五:使用mysqlbinlog命令查看binlog日志明文確定刪除前的POS的點好截取相關的日志文件

?

步驟六:查看誤刪時間段的日志信息
/opt/sumscope/mysql/bin/mysqlbinlog binlog.000002  --start-position=備份數據的POS --stop-position=刪除數據的POS -vv > redo.biglog

步驟七:數據恢復
 --先導入備份的數據source /opt/sumscope/mysql/logs/stc.sql--再導入binlog中的日志source /opt/sumscope/mysql/logs/redo.biglog

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72249.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72249.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VADv2: 基于矢量表征和概率規劃的E2E架構

1. 寫在前面 今天分享一篇自動駕駛領域的論文VADv2(End-to-End Vectorized Autonomous Driving via Probabilistic Planning), 基于矢量表征和概率規劃的E2E架構,2024年2月份華中科技大和地平線合作的一篇文章, 在經典的端到端模型架構上作出了基于概率規劃去輸出規劃軌跡的…

NLP11-命名實體識別(NER)概述

目錄 一、序列標注任務 常見子任務 二、 命名實體識別&#xff08;NER&#xff09; &#xff08;一&#xff09;簡介 &#xff08;二&#xff09;目標 &#xff08;三&#xff09;應用場景 &#xff08;四&#xff09;基本方法 &#xff08;五&#xff09;工具與資源 一…

虛擬仿真無線路由器5G和2.4G發射信號輻射對比(虛擬仿真得出最小安全距離,與國際標準要求一致)

1、前言 有人說&#xff0c;只要有電磁波的地方就有輻射。5G和2.4G信號輻射強度是多少&#xff1f;是否會對人體構成危害&#xff1f;無線路由器的2.4GHz頻段&#xff0c;頻率范圍&#xff1a;2.4 GHz 至 2.4835 GHz&#xff0c;信道寬度&#xff1a;通常為20 MHz&#xff0c;…

深入剖析 OpenCV:全面掌握基礎操作、圖像處理算法與特征匹配

深入剖析 OpenCV&#xff1a;全面掌握基礎操作、圖像處理算法與特征匹配 一、引言二、OpenCV 的安裝&#xff08;一&#xff09;使用 pip 安裝&#xff08;二&#xff09;使用 Anaconda 安裝 三、OpenCV 基礎操作&#xff08;一&#xff09;圖像的讀取、顯示與保存&#xff08;…

DOM HTML:深入理解與高效運用

DOM HTML:深入理解與高效運用 引言 隨著互聯網的飛速發展,前端技術逐漸成為軟件開發中的關鍵部分。DOM(文檔對象模型)和HTML(超文本標記語言)是前端開發中的基石。本文將深入探討DOM和HTML的概念、特性以及在實際開發中的應用,幫助讀者更好地理解和使用這兩項技術。 …

【數據挖掘】Matplotlib

Matplotlib 是 Python 最常用的 數據可視化 庫之一&#xff0c;在數據挖掘過程中&#xff0c;主要用于 數據探索 (EDA)、趨勢分析、模式識別 和 結果展示。 &#x1f4cc; 1. Matplotlib 基礎 1.1 安裝 & 導入 # 如果未安裝 Matplotlib&#xff0c;請先安裝 # pip instal…

DHCP配置實驗

實驗拓撲圖 首先配置server的IP地址和網關 接下來配置R1 undo info-center enable dhcp enable //開啟DHCP服務 ip pool dhcp-pool1 //開始配置dhcp地址池 gateway-list 192.168.1.254 //配置網關 network 192.168.1.0 mask 255.255.255.0 //配置網段和子網掩碼 dns-list …

Linux:ELF文件-靜動態庫原理

??所屬專欄&#xff1a;Linux?? ??作者主頁&#xff1a;嶔某?? ELF文件 什么是編譯&#xff1f;編譯就是將程序源代碼編譯成能讓CPU直接執行的機器代碼 如果我們要編譯一個 .c文件&#xff0c;使用gcc -c將.c文件編譯為二進制文件.o &#xff0c;如果一個項目有多個.…

C++性能優化常用技巧

一. 選擇合適的數據結構 1.1 map與unordered_map的選擇 如果僅僅只需要使用到快速查找的特性&#xff0c;那么unordered_map更加合適&#xff0c;他的復雜度是O(1)。如果還需要排序以及范圍查找的能力&#xff0c;那么就選擇map。 1.2 vector與list的選擇 通常情況下&#…

Towards Graph Foundation Models: A Survey and Beyond

Towards Graph Foundation Models: A Survey and Beyond WWW24 ?#paper/???#? #paper/&#x1f4a1;#? 背景和動機 背景與意義 隨著基礎模型&#xff08;如大語言模型&#xff09;在NLP等領域的突破&#xff0c;圖機器學習正經歷從淺層方法向深度學習的范式轉變。GFM…

基于 Python 深度學習的電影評論情感分析可視化系統(2.0 全新升級)

基于 Python 深度學習的電影評論情感分析可視化系統&#xff0c;基于 Flask 深度學習&#xff0c;構建了一個 影評情感分析系統&#xff0c;能夠 自動分析影評、計算情感趨勢 并 可視化展示&#xff0c;對于電影行業具有重要參考價值&#xff01; 基于 Python 深度學習的電影評…

Cargo, the Rust package manager, is not installed or is not on PATH.

今天在Windows操作系統上通過pip 安裝jupyter的時候遇到這個報錯&#xff0c;Cargo, the Rust package manager, is not installed or is not on PATH.。 解決辦法 官網&#xff1a;https://rustup.rs/# 下載&#xff1a;https://win.rustup.rs/x86_64 安裝完成之后&#xff0c…

CSS—text文本、font字體、列表list、表格table、表單input、下拉菜單select

目錄 1.文本 2.字體 3.列表list a.無序列表 b.有序列表 c.定義列表 4.表格table a.內容 b.合并單元格 3.表單input a.input標簽 b.單選框 c.上傳文件 4.下拉菜單 1.文本 屬性描述color設置文本顏色。direction指定文本的方向 / 書寫方向。letter-spacing設置字符…

開啟AI短劇新紀元!SkyReels-V1/A1雙劍合璧!昆侖萬維開源首個面向AI短劇的視頻生成模型

論文鏈接&#xff1a;https://arxiv.org/abs/2502.10841 項目鏈接&#xff1a;https://skyworkai.github.io/skyreels-a1.github.io/ Demo鏈接&#xff1a;https://www.skyreels.ai/ 開源地址&#xff1a;https://github.com/SkyworkAI/SkyReels-A1 https://github.com/Skywork…

數學建模:MATLAB極限學習機解決回歸問題

一、簡述 極限學習機是一種用于訓練單隱層前饋神經網絡的算法&#xff0c;由輸入層、隱藏層、輸出層組成。 基本原理&#xff1a; 輸入層接受傳入的樣本數據。 在訓練過程中隨機生成從輸入層到隱藏層的所有連接權重以及每個隱藏層神經元的偏置值&#xff0c;這些參數在整個…

Android15音頻進階之定位混音線程丟幀問題(一百零八)

簡介: CSDN博客專家、《Android系統多媒體進階實戰》一書作者 新書發布:《Android系統多媒體進階實戰》?? 優質專欄: Audio工程師進階系列【原創干貨持續更新中……】?? 優質專欄: 多媒體系統工程師系列【原創干貨持續更新中……】?? 優質視頻課程:AAOS車載系統+…

_ 為什么在python中可以當變量名

在 Python 中&#xff0c;_&#xff08;下劃線&#xff09;是一個有效的變量名&#xff0c;這主要源于 Python 的命名規則和一些特殊的使用場景。以下是為什么 _ 可以作為變量名的原因和常見用途&#xff1a; --- ### 1. **Python 的命名規則** Python 允許使用字母&#xff…

Electron+Vite+React+TypeScript開發問題手冊

ElectronViteReactTypeScript跨平臺開發全問題手冊 一、開發環境配置類問題 1.1 依賴安裝卡頓&#xff08;國內網絡環境&#xff09; 問題現象&#xff1a;執行npm install時卡在node-gyp編譯或Electron二進制包下載階段 解決方案&#xff1a; # 配置國內鏡像源 npm config …

【計算機網絡入門】初學計算機網絡(七)

目錄 1. 滑動窗口機制 2. 停止等待協議&#xff08;S-W&#xff09; 2.1 滑動窗口機制 2.2 確認機制 2.3 重傳機制 2.4 為什么要給幀編號 3. 后退N幀協議&#xff08;GBN&#xff09; 3.1 滑動窗口機制 3.2 確認機制 3.3 重傳機制 4. 選擇重傳協議&#xff08;SR&a…

《Python實戰進階》No 8:部署 Flask/Django 應用到云平臺(以Aliyun為例)

第8集&#xff1a;部署 Flask/Django 應用到云平臺&#xff08;以Aliyun為例&#xff09; 2025年3月1日更新 增加了 Ubuntu服務器安裝Python詳細教程鏈接。 引言 在現代 Web 開發中&#xff0c;開發一個功能強大的應用只是第一步。為了讓用戶能夠訪問你的應用&#xff0c;你需…