MySQL 把線上資料庫刪了怎麼辦?

2021-10-23 13:43:46 字數 2639 閱讀 2533

寫在前面

估計二狗子這幾天是大姨夫來了,心情很鬱悶,情緒也很低落,工作的時候也有點心不在焉。讓他發個版本,結果,一行命令下去把線上的資料庫刪了!你沒聽錯:是刪掉了線上的資料庫!運營那邊頓時炸了鍋:怎麼回事?系統不能訪問了!什麼情況啊?!很多客戶都在投訴了!!

儘管運營那邊慌慌張張的不知所措,但是,我們作為技術人員還是要淡定,不就是刪了資料庫嗎?沒事,哥幫你搞定!

事件背景

mysql資料庫每日零點自動全備

某天上午9點,二狗子不小心drop了乙個資料庫

我們需要通過全備的資料檔案,以及增量的binlog檔案進行資料恢復

主要思想與原理

利用全備的sql檔案中記錄的change master語句,binlog檔案及其位置點資訊,找出binlog檔案增量的部分

用mysqlbinlog命令將上述的binlog檔案匯出為sql檔案,並剔除其中的drop語句

通過全備檔案和增量binlog檔案的匯出sql檔案,就可以恢復到完整的資料

過程示意圖

操作過程

模擬資料

create tablestudent(

idint(11) not null auto_increment,

namechar(20) not null,

agetinyint(2) not null default 『0』,

primary key (id),

keyindex_name(name)

) engine=innodb auto_increment=8 default charset=utf8

mysql> insert student values(1,『zhangsan』,20);

mysql> insert student values(2,『lisi』,21);

mysql> insert student values(3,『wangwu』,22);

全備命令

引數說明:

-b 指定資料庫

-f 重新整理日誌

-r 備份儲存過程等

-x 鎖表

--master-data 在備份語句裡新增change master語句以及binlog檔案及位置點資訊

繼續插入資料並刪庫

mysql> insert student values(4,『xiaoming』,20);

mysql> insert student values(5,『xiaohong』,20);

在插入資料的時候我們模擬誤操作,刪除test資料庫。

mysql> drop database test;

此時,全備之後到誤操作時刻之間,使用者寫入的資料在binlog中,需要恢復出來。

檢視全備之後新增的binlog檔案

test_2020-08-19.sql.gz

– change master to master_log_file=『mysql-bin.000003』, master_log_pos=107;

這是全備時刻的binlog檔案位置,即mysql-bin.000003的107行,因此在該檔案之前的binlog檔案中的資料都已經包含在這個全備的sql檔案中了

移動binlog檔案,並讀取sql,剔除其中的drop語句

接下來,使用vim編輯mysql-bin.000003.sql檔案,剔除drop語句

注意:在恢復全備資料之前必須將該binlog檔案移出,否則恢復過程中,會繼續寫入語句到binlog,最終導致增量恢復資料部分變得比較混亂

恢復資料

±—±---------±----+

| id | name | age |

±—±---------±----+

| 1 | zhangsan | 20 |

| 2 | lisi | 21 |

| 3 | wangwu | 22 |

±—±---------±----+

此時恢復了全備時刻的資料,然後使用mysql-bin.000003.sql檔案恢復全備時刻到刪除資料庫之間,新增的資料。

±—±---------±----+

| id | name | age |

±—±---------±----+

| 1 | zhangsan | 20 |

| 2 | lisi | 20 |

| 3 | wangwu | 20 |

| 4 | xiaoming | 20 |

| 5 | xiaohong | 20 |

±—±---------±----+

此時,整個恢復過程結束,是不是很簡單呢?沒錯,就是這麼簡單!!

總結

適合人為sql語句造成的誤操作或者沒有主從複製等的熱備情況宕機時的修復。

恢復條件要全備和增量的所有資料。

恢復時建議對外停止更新,即禁止更新資料庫。

先恢復全量,然後把全備時刻點以後的增量日誌,按順序恢復成sql檔案,然後把檔案中有問題的sql語句刪除(也可通過時間和位置點),再恢復到資料庫。

重磅福利

線上mysql備份 線上mysql資料庫備份

bin bash filename mysqlbackup.sh desc mysql databases backup tool.author chenzm email 969113439 qq.com homepage version 0.0.1 lastchange 2013 11 15 09...

怎麼遷mysql資料庫 MySQL資料庫遷移

mysql資料庫遷移 資料檔案直接遷移 在遷移之前有三種方案 1.資料庫直接匯出,拷貝檔案到新伺服器,在新伺服器上匯入。2.使用 mysql gui tools 中的 mysqlmigrationtool。3.資料檔案和庫表結構檔案直接拷貝到新伺服器,掛載到同樣配置的mysql服務下。我在我的電腦上...

怎麼恢復MySQL資料庫

雲資料庫 rds是阿里雲提供的即開即用的關係型資料庫服務,相容了mysql sql server postgresql ppas 高度相容oracle 四種資料庫引擎。在傳統資料庫的基礎上,阿里雲rds提供了強大豐富的功能從而保證了高可用性 高安全性以及高效能。此外,rds還提供了諸多便利功能提公升...