最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)誤刪恢復(fù)的完整指南

 更新時(shí)間:2026年02月27日 08:36:22   作者:·云揚(yáng)·  
在數(shù)據(jù)庫(kù)運(yùn)維中,drop table 誤刪表、delete 誤刪數(shù)據(jù)是最讓人崩潰的場(chǎng)景之一,一旦操作失誤,輕則業(yè)務(wù)中斷,重則數(shù)據(jù)永久丟失,本文結(jié)合實(shí)戰(zhàn)場(chǎng)景,詳細(xì)拆解兩種核心誤操作的恢復(fù)流程,需要的朋友可以參考下

引言

在數(shù)據(jù)庫(kù)運(yùn)維中,drop table 誤刪表、delete 誤刪數(shù)據(jù)是最讓人崩潰的場(chǎng)景之一。一旦操作失誤,輕則業(yè)務(wù)中斷,重則數(shù)據(jù)永久丟失。本文結(jié)合實(shí)戰(zhàn)場(chǎng)景,詳細(xì)拆解兩種核心誤操作的恢復(fù)流程,附完整命令與避坑指南,同時(shí)分享運(yùn)維預(yù)防策略,幫你從容應(yīng)對(duì)數(shù)據(jù)危機(jī)。

一、drop 表恢復(fù):全量備份 + Binlog 增量補(bǔ)充

drop table 會(huì)直接刪除表結(jié)構(gòu)與所有數(shù)據(jù),屬于高危 DDL 操作,恢復(fù)需依賴「全量備份打底 + Binlog 增量補(bǔ)充」的組合方案,缺一不可。

1.1 恢復(fù)核心邏輯

通過(guò)全量備份還原誤刪前的基礎(chǔ)數(shù)據(jù),再?gòu)?Binlog 日志中提取全備后到誤刪前的增量數(shù)據(jù),回放至恢復(fù)實(shí)例,最終完成數(shù)據(jù)完整恢復(fù)。

1.2 必備前提(關(guān)鍵?。?/h3>
  • 存在誤刪時(shí)間點(diǎn)前的全量備份文件(無(wú)全備則無(wú)法恢復(fù));
  • MySQL 已開(kāi)啟Binlog 日志,且全備后至誤刪期間的日志完整無(wú)缺失;
  • 提前部署專用恢復(fù)實(shí)例(避免臨時(shí)部署浪費(fèi)時(shí)間)。

1.3 實(shí)戰(zhàn)操作步驟(附完整命令)

步驟 1:日常環(huán)境準(zhǔn)備(提前完成)

-- 1. 創(chuàng)建測(cè)試庫(kù)表與基礎(chǔ)數(shù)據(jù)
create database recover;
use recover;
CREATE TABLE test_recover (
 id int NOT NULL AUTO_INCREMENT,
 a int NOT NULL,
 PRIMARY KEY (id)
) ENGINE=InnoDB CHARSET=utf8mb4;
insert into test_recover values (1,1),(2,2);

-- 2. 創(chuàng)建備份專用用戶(遵循最小權(quán)限原則)
CREATE USER `u_backup`@`localhost` IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'Ujg8G_aUU';
GRANT SELECT, RELOAD, PROCESS, SUPER, LOCK TABLES,BACKUP_ADMIN ON *.* TO `u_backup`@`localhost`;

-- 3. 執(zhí)行全量備份(使用xtrabackup工具)
cd /data/backup/xtrabackup_bak
xtrabackup --defaults-file=/data/mysql/conf/my.cnf -uu_backup -p'Ujg8G_aUU' --backup --stream=xbstream --target-dir=./ >/data/backup/xtrabackup_bak/xtrabackup.xbstream

步驟 2:模擬誤操作場(chǎng)景

-- 1. 插入全備后的增量數(shù)據(jù)
use recover;
insert into test_recover values (3,3);

-- 2. 驗(yàn)證數(shù)據(jù)(此時(shí)表中應(yīng)有3條數(shù)據(jù))
select * from test_recover;

-- 3. 模擬誤刪表
drop table test_recover;

步驟 3:全量備份導(dǎo)入恢復(fù)實(shí)例

# 1. 傳輸備份文件到恢復(fù)實(shí)例(示例IP:192.168.184.152)
# 恢復(fù)實(shí)例操作:創(chuàng)建接收目錄
mkdir /data/backup/recover
# 源實(shí)例操作:傳輸文件
scp /data/backup/xtrabackup.xbstream 192.168.184.152:/data/backup/recover

# 2. 恢復(fù)實(shí)例清空環(huán)境(僅恢復(fù)實(shí)例執(zhí)行!)
/etc/init.d/mysql.server stop
rm /data/mysql/data/* -rf
rm /data/mysql/binlog/* -rf

# 3. 解壓并恢復(fù)全備數(shù)據(jù)
cd /data/backup/recover
xbstream -x backup.xbstream
xtrabackup --prepare --target-dir=./
xtrabackup --defaults-file=/data/mysql/conf/my.cnf --copy-back --target-dir=./
chown -R mysql.mysql /data/mysql
/etc/init.d/mysql.server start

# 4. 驗(yàn)證全備恢復(fù)結(jié)果(僅能看到基礎(chǔ)數(shù)據(jù)1,1和2,2)
mysql -uroot -p -e "select * from recover.test_recover;"

步驟 4:Binlog 增量數(shù)據(jù)恢復(fù)

# 1. 查看全備對(duì)應(yīng)的Binlog起點(diǎn)(獲取文件名與位點(diǎn))
cat /data/backup/recover/xtrabackup_binlog_info
# 輸出示例:mysql-bin.000026	196	dac2d0d1-d4cc-11f0-8896-000c295cba4b:1-3395053

# 2. 傳輸源實(shí)例Binlog文件到恢復(fù)實(shí)例
scp 192.168.184.151:/data/mysql/binlog/mysql-bin.000026/data/backup/binlog

# 3. 定位drop操作前的有效事務(wù)
cd /data/backup/binlog
mysqlbinlog mysql-bin.000026 --start-datetime='2026-02-11 10:20:00' --stop-datetime='2026-02-11 14:40:00' --base64-output=decode-rows -v > 1.sql
cat 1.sql | grep -A 5 -B 5 "DROP TABLE"
# 找到GTID范圍:dac2d0d1-d4cc-11f0-8896-000c295cba4b:3395054

# 4. 創(chuàng)建恢復(fù)專用用戶
mysql -uroot -p 
CREATE USER `u_recover`@`localhost` IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'Ujg8G_aUU'; 
GRANT insert,SESSION_VARIABLES_ADMIN,REPLICATION_APPLIER ON *.* TO `u_recover`@`localhost`;"

# 5. 回放Binlog增量數(shù)據(jù)
mysqlbinlog --include-gtids='dac2d0d1-d4cc-11f0-8896-000c295cba4b:3395035-3395054' mysql-bin.000026 | mysql -uu_recover -p'Ujg8G_aUU'

# 6. 驗(yàn)證增量恢復(fù)(此時(shí)應(yīng)有3條完整數(shù)據(jù))
mysql -uroot -p -e "select * from recover.test_recover;"

步驟 5:數(shù)據(jù)回遷源實(shí)例

# 1. 恢復(fù)實(shí)例導(dǎo)出完整表
mysqldump -uroot -p --set-gtid-purged=off --skip-add-drop-table recover test_recover > recover_test_recover.sql

# 2. 傳輸?shù)皆磳?shí)例
scp recover_test_recover.sql 192.168.184.151:/data/backup

# 3. 源實(shí)例導(dǎo)入數(shù)據(jù)
mysql -uroot -p recover data/backup/recover_test_recover.sql

# 4. 最終驗(yàn)證
mysql -uroot -p -e "select * from recover.test_recover;"

二、delete 誤刪恢復(fù):my2sql 快速回滾

delete 僅刪除數(shù)據(jù)(表結(jié)構(gòu)保留),無(wú)需全量備份,通過(guò)my2sql工具解析 Binlog 生成反向 SQL,即可快速恢復(fù)。

2.1 恢復(fù)核心邏輯

Binlog(Row 格式)會(huì)記錄每條刪除數(shù)據(jù)的完整鏡像,my2sql解析該鏡像生成insert反向語(yǔ)句,執(zhí)行后即可還原數(shù)據(jù)。

2.2 前提條件與工具準(zhǔn)備

必備條件

  • Binlog 格式為Row,且binlog_row_image=full;
  • 僅支持 DML 操作回滾(不支持 drop/truncate);
  • 用戶認(rèn)證方式為mysql_native_password。

工具安裝(CentOS 7)

cd /data/backup
wget https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_7.x/my2sql
chmod +x my2sql
./my2sql -h  # 驗(yàn)證安裝

2.3 實(shí)戰(zhàn)操作步驟

步驟 1:環(huán)境準(zhǔn)備

-- 1. 創(chuàng)建測(cè)試庫(kù)表與數(shù)據(jù)
create database d_recover;
use d_recover;
CREATE TABLE del_t1 (
  id int NOT NULL AUTO_INCREMENT,
  a int NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB CHARSET=utf8mb4;
insert into del_t1 values (1,1),(2,2);

-- 2. 創(chuàng)建解析專用用戶
CREATE USER `u_rollback`@`127.0.0.1` IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'IgdI8G_aUU';
GRANT SELECT, REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO `u_rollback`@`127.0.0.1`;

步驟 2:模擬誤操作與定位 Binlog

-- 1. 模擬delete誤刪
delete from d_recover.del_t1;
# 2. 復(fù)制目標(biāo)Binlog文件
mkdir /data/backup/rollback
cp /data/mysql/binlog/mysql-bin.000026 /data/backup/rollback

# 3. 定位delete操作位點(diǎn)
cd /data/backup/rollback
mysqlbinlog mysql-bin.000026 --start-datetime='2026-02-11 15:25:00' --stop-datetime='2026-02-11 15:32:00' --base64-output=decode-rows -v > operation.sql
cat operation.sql | grep -A 10 -B 10 "delete from d_recover.del_t1"
# 記錄start-pos(3511)與stop-pos(3674)

步驟 3:生成并執(zhí)行回滾 SQL

# 1. 生成回滾SQL
cd /data/backup
mkdir recover_01
./my2sql -user u_rollback -password 'IgdI8G_aUU' -host 127.0.0.1 -databases d_recover -tables del_t1 -work-type rollback -start-file mysql-bin.000023 -start-pos 3511 -stop-pos 3674 -output-dir recover_01

# 2. 驗(yàn)證回滾SQL(應(yīng)為insert語(yǔ)句)
cat recover_01/rollback.23.sql

# 3. 執(zhí)行回滾
mysql -uroot -p <recover_01/rollback.23.sql

# 4. 驗(yàn)證結(jié)果
mysql -uroot -p -e "select * from d_recover.del_t1;"

三、運(yùn)維終極建議:防患于未然

數(shù)據(jù)恢復(fù)永遠(yuǎn)是最后手段,做好預(yù)防才能從根源避免損失:

  1. 提前部署恢復(fù)實(shí)例:為每個(gè) MySQL 版本配置專用恢復(fù)實(shí)例,縮短應(yīng)急響應(yīng)時(shí)間;
  2. 定期備份與校驗(yàn):每周至少 1 次全量備份,隨機(jī)抽查備份文件可用性(避免備份損壞);
  3. Binlog 規(guī)范配置:開(kāi)啟 Binlog 并保留≥7 天,開(kāi)啟日志輪轉(zhuǎn)(避免單文件過(guò)大);
  4. 高危操作雙重確認(rèn):執(zhí)行 drop/delete/truncate 前,強(qiáng)制先執(zhí)行 select 確認(rèn)數(shù)據(jù)范圍,或通過(guò)腳本增加二次彈窗確認(rèn);
  5. 多方案?jìng)浞莶呗?/strong>:除全備 + Binlog 外,可部署「延時(shí)從庫(kù)」(同步延遲 1-2 小時(shí))、定期備份表空間文件,多一層保障;
  6. 權(quán)限最小化管控:禁止開(kāi)發(fā)人員直接操作生產(chǎn)庫(kù),備份 / 恢復(fù)使用專用低權(quán)限用戶。

總結(jié)

MySQL 數(shù)據(jù)誤刪恢復(fù)的核心是「?jìng)浞?+ 日志」:drop 表依賴全備 + Binlog 組合,delete 可通過(guò) my2sql 快速回滾。但最有效的方案永遠(yuǎn)是「預(yù)防為主,應(yīng)急為輔」—— 日常做好備份、權(quán)限管控與操作規(guī)范,才能在誤操作發(fā)生時(shí)從容應(yīng)對(duì),將損失降到最低。

如果遇到特殊場(chǎng)景(如 Binlog 丟失、備份損壞),歡迎留言交流,共同探討解決方案!

以上就是MySQL數(shù)據(jù)誤刪恢復(fù)的完整指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)誤刪恢復(fù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql如何導(dǎo)出服務(wù)器內(nèi)所有的數(shù)據(jù)庫(kù)

    mysql如何導(dǎo)出服務(wù)器內(nèi)所有的數(shù)據(jù)庫(kù)

    這篇文章主要介紹了mysql如何導(dǎo)出服務(wù)器內(nèi)所有的數(shù)據(jù)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • mysql函數(shù)之常見(jiàn)數(shù)學(xué)函數(shù)示例詳解

    mysql函數(shù)之常見(jiàn)數(shù)學(xué)函數(shù)示例詳解

    文章總結(jié)了多個(gè)數(shù)學(xué)和字符串處理函數(shù)的功能和使用示例,包括格式化數(shù)字、計(jì)算絕對(duì)值、平方根、取整、生成隨機(jī)數(shù)、四舍五入、截?cái)唷⒎祷胤?hào)、冪運(yùn)算以及最大值最小值的計(jì)算,感興趣的朋友一起看看吧
    2025-03-03
  • mysql5.5 master-slave(Replication)主從配置

    mysql5.5 master-slave(Replication)主從配置

    在主機(jī)master中對(duì)test數(shù)據(jù)庫(kù)進(jìn)行sql操作,再查看從機(jī)test數(shù)據(jù)庫(kù)是否產(chǎn)生同步。
    2011-07-07
  • MySQL聯(lián)合索引功能與用法實(shí)例分析

    MySQL聯(lián)合索引功能與用法實(shí)例分析

    這篇文章主要介紹了MySQL聯(lián)合索引功能與用法,結(jié)合具體實(shí)例形式分析了聯(lián)合索引的概念、功能、具體使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • 從mysql讀寫分離著手提升服務(wù)器性能

    從mysql讀寫分離著手提升服務(wù)器性能

    這篇文章主要為大家介紹了從mysql讀寫分離著手提升服務(wù)器性能實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL8.0.23免安裝版配置詳細(xì)教程

    MySQL8.0.23免安裝版配置詳細(xì)教程

    這篇文章主要介紹了MySQL8.0.23免安裝版配置教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 內(nèi)網(wǎng)ssh/mysql登錄緩慢的解決方法

    內(nèi)網(wǎng)ssh/mysql登錄緩慢的解決方法

    本文介紹了“內(nèi)網(wǎng)ssh/mysql登錄緩慢的解決方法”,需要的朋友可以參考一下
    2013-03-03
  • MySQL將多條數(shù)據(jù)合并成一條的完整代碼示例

    MySQL將多條數(shù)據(jù)合并成一條的完整代碼示例

    我們?cè)诓僮鲾?shù)據(jù)的時(shí)候,有時(shí)候需要把多行數(shù)據(jù),拼接成一行,下面這篇文章主要給大家介紹了關(guān)于MySQL將多條數(shù)據(jù)合并成一條的完整代碼示例,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • MySQL 查詢某個(gè)字段含有字母數(shù)字的值示例詳解

    MySQL 查詢某個(gè)字段含有字母數(shù)字的值示例詳解

    在本文中,我們?cè)敿?xì)介紹了如何在 MySQL 中查詢某個(gè)字段含有字母和數(shù)字的值,我們首先介紹了正則表達(dá)式的基礎(chǔ)知識(shí),然后通過(guò)五個(gè)具體示例展示了如何應(yīng)用這些知識(shí),通過(guò)這些示例,我們可以看到正則表達(dá)式在處理復(fù)雜字符串模式匹配時(shí)的強(qiáng)大功能,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • docker 部署mysql詳細(xì)過(guò)程(docker部署常見(jiàn)應(yīng)用)

    docker 部署mysql詳細(xì)過(guò)程(docker部署常見(jiàn)應(yīng)用)

    這篇文章主要介紹了docker 部署mysql之docker部署常見(jiàn)應(yīng)用,本文以docker部署mysql5.7.26為例,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

浦江县| 刚察县| 井研县| 大埔区| 运城市| 盘山县| 东海县| 静乐县| 疏勒县| 麦盖提县| 嘉荫县| 运城市| 高陵县| 区。| 渭源县| 姚安县| 腾冲县| 汨罗市| 翁牛特旗| 永和县| 普宁市| 广饶县| 淳安县| 博野县| 侯马市| 张家界市| 榆社县| 威海市| 陇川县| 宁武县| 龙南县| 尚义县| 滨海县| 揭西县| 武山县| 连江县| 哈巴河县| 鹤壁市| 苍溪县| 江华| 涟源市|