MySQL數(shù)據(jù)庫(kù)通過(guò)Binlog恢復(fù)數(shù)據(jù)的詳細(xì)步驟
Mysql Binlog 簡(jiǎn)介
Mysql Binlog是二進(jìn)制格式的日志文件
Binlog是用來(lái)記錄Mysql內(nèi)部對(duì)數(shù)據(jù)庫(kù)的改動(dòng)(只記錄對(duì)數(shù)據(jù)的修改操作),主要用于數(shù)據(jù)庫(kù)的主從復(fù)制以及增量恢復(fù)
開(kāi)啟Binlog
查看是否打開(kāi)了Binlog 【ON表示已經(jīng)打開(kāi) OFF表示關(guān)閉 默認(rèn)關(guān)閉狀態(tài)】
show variables like ‘%log_bin%’;
開(kāi)啟Binlog 【修改完以后重啟服務(wù)】
方法1:
找到mysql配置中的my.ini文件,在[mysqld]下面添加如下參數(shù)
log_bin=mysql-bin
binlog-format=ROW
Mysql binlog日志有三種格式 【binlog-format參數(shù)】
1.Statement:每一條會(huì)修改數(shù)據(jù)的sql都會(huì)記錄在binlog中
2.Row:不記錄sql語(yǔ)句上下文相關(guān)信息,僅保存哪條記錄被修改
3.Mixedlevel:是以上兩種level的混合使用,一般的語(yǔ)句修改使用statment格式保存binlog,如一些函數(shù),statement無(wú)法完成主從復(fù)制的操作,則采用row格式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的每一條具體的sql語(yǔ)句來(lái)區(qū)分對(duì)待記錄的日志形式,也就是在Statement和Row之間選擇一種.新版本的MySQL中對(duì)row level模式也被做了優(yōu)化,并不是所有的修改都會(huì)以row level來(lái)記錄,像遇到表結(jié)構(gòu)變更的時(shí)候就會(huì)以statement模式來(lái)記錄。至于update或者delete等修改數(shù)據(jù)的語(yǔ)句,還是會(huì)記錄所有行的變更。
方法2:
SET SQL_LOG_BIN=1 命令開(kāi)啟
SET SQL_LOG_BIN=0 命令關(guān)閉
開(kāi)啟以后,重啟服務(wù)會(huì)發(fā)現(xiàn)data目錄下多了日志文件
使用Binlog恢復(fù)數(shù)據(jù)
show master status; 【查看當(dāng)前正在寫入的binlog文件】
測(cè)試表, 測(cè)試update 【全部改為趙六,再改為老王,恢復(fù)為全部為趙六】
update user set name = ‘趙六’;
update user set name = ‘老王’;
show binlog EVENTS in ‘binlog.000178’ ; 【查詢所需要恢復(fù)的事件起止的位置】
如果是恢復(fù)最后一次修改前數(shù)據(jù),則使用記錄的倒數(shù)第二條日志的結(jié)束起止坐標(biāo)
cmd 切換到MySQL存放mysqlbinlog.exe應(yīng)用程序的bin目錄后,執(zhí)行以下命令,指定數(shù)據(jù)恢復(fù)起始位置,轉(zhuǎn)換為SQL文件
這里的起止坐標(biāo)為2536 - 2848
mysqlbinlog --no-defaults “D:\DataBase\MYSQL\mysql-8.0.24-winx64\data\binlog.000178” -d test --skip-gtids --start-position=2536 --stop-position=2848>test.sql
cmd登錄MySQL,切換到對(duì)應(yīng)數(shù)據(jù)庫(kù),執(zhí)行命令指定SQL文件位置恢復(fù)數(shù)據(jù)
mysql -uroot -p123456
use test;
source D:\DataBase\MYSQL\mysql-8.0.24-winx64\bin\test.sql
再次查詢表數(shù)據(jù)
附錄
cmd 切換到MySQL存放mysqlbinlog.exe應(yīng)用程序的bin目錄后,執(zhí)行以下命令,可以將Binlog文件轉(zhuǎn)換為txt文件,方便閱讀理解
cmd 切換到MySQL存放mysqlbinlog.exe應(yīng)用程序的bin目錄后,執(zhí)行以下命令,可以一次性完成數(shù)據(jù)恢復(fù)
mysqlbinlog.exe --no-defaults --start-position=2536 --stop-position=2848 --database=test “D:\DataBase\MYSQL\mysql-8.0.24-winx64\data\binlog.000178” | mysql -u root -p
mysqlbinlog: [ERROR] unknown variable ‘default-character-set=utf8’.
如果遇到這個(gè)錯(cuò)誤原因是mysqlbinlog這個(gè)工具無(wú)法識(shí)別binlog中的配置中的default-character-set=utf8這個(gè)指令
兩個(gè)方法可以解決這個(gè)問(wèn)題:
一:在MySQL的配置/etc/my.cnf中將default-character-set=utf8 修改為 character-set-server = utf8,需要重啟MySQL服務(wù)
二:用mysqlbinlog --no-defaults mysql-bin.000004 命令打開(kāi)
總結(jié)
到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)通過(guò)Binlog恢復(fù)數(shù)據(jù)的文章就介紹到這了,更多相關(guān)MySQL Binlog恢復(fù)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL通過(guò)binlog實(shí)現(xiàn)恢復(fù)數(shù)據(jù)
- Python MySQL如何通過(guò)Binlog獲取變更記錄恢復(fù)數(shù)據(jù)
- MySQL通過(guò)日志恢復(fù)數(shù)據(jù)的操作步驟
- MySQL通過(guò)ibd文件恢復(fù)數(shù)據(jù)的操作過(guò)程
- MySQL開(kāi)啟配置binlog及通過(guò)binlog恢復(fù)數(shù)據(jù)步驟詳析
- mysql binlog如何恢復(fù)數(shù)據(jù)到某一時(shí)刻
- MySQL誤刪后使用binlog恢復(fù)數(shù)據(jù)的實(shí)現(xiàn)方法
- mysql數(shù)據(jù)損壞,如何通過(guò)ibd和frm文件批量恢復(fù)數(shù)據(jù)庫(kù)數(shù)據(jù)
- Mysql如何通過(guò)ibd文件恢復(fù)數(shù)據(jù)
- mysql如何根據(jù).frm和.ibd文件恢復(fù)數(shù)據(jù)表
- 一步步教你如何使用mysql?binlog恢復(fù)數(shù)據(jù)
- MySql恢復(fù)數(shù)據(jù)方法梳理講解
- Mysql通過(guò)ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟
- Mysql如何通過(guò)binlog日志恢復(fù)數(shù)據(jù)詳解
- mysql5.7使用binlog 恢復(fù)數(shù)據(jù)的方法
- MySQL通過(guò)binlog恢復(fù)數(shù)據(jù)
- mysql8.0無(wú)備份通過(guò)idb文件恢復(fù)數(shù)據(jù)的方法、idb文件修復(fù)和tablespace?id不一致處理
相關(guān)文章
Mysql數(shù)據(jù)表中的蠕蟲復(fù)制使用方法
在本文中我們給大家分享了關(guān)于怎么使用Mysql數(shù)據(jù)表中的蠕蟲復(fù)制的相關(guān)知識(shí)點(diǎn),有興趣的朋友們學(xué)習(xí)下。2019-02-02MySQL數(shù)據(jù)入庫(kù)時(shí)特殊字符處理詳解
本文是對(duì)MySQL數(shù)據(jù)入庫(kù)時(shí)特殊字符的處理進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11MySQL的CASE WHEN語(yǔ)句的幾個(gè)使用實(shí)例
這篇文章主要介紹了MySQL的CASE WHEN語(yǔ)句的幾個(gè)使用實(shí)例,需要的朋友可以參考下2014-05-05MySQL性能監(jiān)控軟件Nagios的安裝及配置教程
這篇文章主要介紹了MySQL性能監(jiān)控軟件Nagios的安裝及配置教程,這里以CentOS操作系統(tǒng)為環(huán)境進(jìn)行演示,需要的朋友可以參考下2015-12-12Mysql中TIMESTAMPDIFF函數(shù)的語(yǔ)法與練習(xí)案例
在應(yīng)用時(shí)經(jīng)常要使用這兩個(gè)函數(shù)TIMESTAMPDIFF和TIMESTAMPADD,下面這篇文章主要給大家介紹了關(guān)于Mysql中TIMESTAMPDIFF函數(shù)的語(yǔ)法與練習(xí)案例的相關(guān)資料,需要的朋友可以參考下2022-09-09MySQL 字符串拆分實(shí)例(無(wú)分隔符的字符串截取)
這篇文章主要介紹了MySQL 字符串拆分實(shí)例(無(wú)分隔符的字符串截取),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02MySQL循環(huán)查詢的實(shí)現(xiàn)示例
MySQL循環(huán)查詢是指在MySQL數(shù)據(jù)庫(kù)中使用循環(huán)結(jié)構(gòu)進(jìn)行數(shù)據(jù)查詢的一種方法,本文主要介紹了MySQL循環(huán)查詢的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07