MySQL数据库无完整备份删库,除了跑路还能怎么办?
來源 |?阿丸筆記
責(zé)編| Carol
封圖|?CSDN│下載于視覺中國
“刪庫跑路”這個詞兒,經(jīng)常被掛在嘴邊當(dāng)玩笑,是因為大家都知道,一旦真的發(fā)生這樣的事情,企業(yè)損失是無比慘重的。
本文作者為 CSDN 博客的一位博主,?從他的描述中得知,前段時間作者所在的公司,由于運維同事的一次誤操作,清空了內(nèi)網(wǎng)核心數(shù)據(jù)庫,導(dǎo)致了公司內(nèi)部管理系統(tǒng)長時間不可用,大量知識庫內(nèi)容由于沒有備份險些丟失。
結(jié)合近期的刪庫跑路事件,我們可以看到,數(shù)據(jù)庫的備份與恢復(fù)顯得尤為重要。
本文將對此次內(nèi)網(wǎng)數(shù)據(jù)恢復(fù)過程做一些整理,介紹刪庫后的搶救方案。同時,引發(fā)對數(shù)據(jù)庫穩(wěn)定性的思考。
接下來讓我們從作者的角度,來看看他們是如何對數(shù)據(jù)庫進行搶救的。
數(shù)據(jù)搶修
這份內(nèi)網(wǎng)數(shù)據(jù)事先沒有特意備份,所以一開始認(rèn)為需要從磁盤恢復(fù)數(shù)據(jù)了。所以緊急聯(lián)系了數(shù)據(jù)恢復(fù)公司,希望過來恢復(fù)磁盤數(shù)據(jù)。
這里需要注意,數(shù)據(jù)恢復(fù)公司建議馬上關(guān)機,避免磁盤數(shù)據(jù)被覆蓋。
聯(lián)系數(shù)據(jù)恢復(fù)公司的同時,運維同事在內(nèi)網(wǎng)找到了幾個殘缺的備份文件,包括去年4月份的一個全量備份數(shù)據(jù)、今年2月初一個半全量備份數(shù)據(jù)(備份到r開頭的表就失敗了,剩余表沒有備份),以及近7天到binlog日志文件。
所以立刻進行另一套恢復(fù)方案:
1)用今年2月初的半全量數(shù)據(jù)恢復(fù)一個庫A
2)用去年4月份的全量數(shù)據(jù)恢復(fù)一個庫B
3)將B數(shù)據(jù)庫中r開頭之后的表拷貝一份到數(shù)據(jù)庫A中
4)數(shù)據(jù)庫A中重放近3天的binlog。(注意,binlog回放時間截止到drop命令時間之前)
1、dump文件恢復(fù)
一開始想通過阿里云,把dump文件恢復(fù)到rds上。
結(jié)果發(fā)現(xiàn)需要super權(quán)限,而這個權(quán)限是阿里云高權(quán)限賬號(另外還有普通賬號)也不具備的,問了阿里云也不提供。因此,無法恢復(fù)到rds。
所以我們只能把dump文件恢復(fù)到本地數(shù)據(jù)庫。
在ECS上建立一個mysql數(shù)據(jù)庫,然后就是dump文件恢復(fù)。
有兩種方式:
1)命令行恢復(fù)
mysql -u root xxxdb < xxxx-backup.sql
2)在mysql客戶端中恢復(fù)
用root登陸后
use xxxdb;
source /data/xxxx-backup.sql
2、binlog文件重放恢復(fù)
基于起止時間恢復(fù)數(shù)據(jù)
sudo mysqlbinlog --start-datetime=“2020-02-16 17:00:01” --stop-datetime=“2020-02-20 17:00:00” —database=xxxdb mysql-bin.000218 | mysql -f -u root xxxdb
–database 指定了使用binlog中的哪個數(shù)據(jù)庫進行導(dǎo)入,否則,如果binlog中有多個庫的操作記錄,會大量報錯。
更多binlog命令參數(shù)見:
https://dev.mysql.com/doc/refman/5.6/en/mysqlbinlog.html#option_mysqlbinlog_database
-f 用于mysql命令,重建過程中如果遇到問題會繼續(xù)執(zhí)行而不是中斷退出。
Actually mysqlbinlog does not stop after error, mysqlbinlog just converts log file to text format, nothing more. The problem is that mysql client stops after error. Please try ‘mysql -f’.
數(shù)據(jù)備份
數(shù)據(jù)備份可以有多種方式,這里介紹三種
1、本地dump備份數(shù)據(jù)文件
比較方便存儲,不過用起來限制也比較多,容易中斷。
mysqldump --max_allowed_packet=1024M -u root xxxxdv > 20200219.sql
2、阿里云dts遷移備份
可以在阿里云上建一個dts遷移任務(wù)(遷移任務(wù)基本免費,同步任務(wù)收費),然后通過dts將源數(shù)據(jù)庫直接遷移到rds、ecs自建數(shù)據(jù)庫、vpc網(wǎng)絡(luò)下到自建數(shù)據(jù)等地方。
可以避免dump還原的過程。
需要有個目標(biāo)庫,備份不是以簡單的數(shù)據(jù)文件形式,而是一個備份數(shù)據(jù)庫的形式。
3、xtrabackup(簡稱xbk)
https://www.percona.com/software/mysql-database/percona-xtrabackup
基于拷貝物理文件和redo來實現(xiàn)備份。
數(shù)據(jù)庫穩(wěn)定性思考
不管是運維的誤操作,還是刪庫跑路的事件,從根本上反映了企業(yè)數(shù)據(jù)庫穩(wěn)定性管理的不足。
任何事后搶救的措施,都比不上事前的謹(jǐn)慎防范。
如何提高企業(yè)數(shù)據(jù)庫的穩(wěn)定性,避免出現(xiàn)類似這樣的事情呢?
1、統(tǒng)一技術(shù)棧,使用云廠商的云數(shù)據(jù)庫
從現(xiàn)在云技術(shù)的發(fā)展來看,以阿里云、華為云等大廠提供的云數(shù)據(jù)庫,能大大降低企業(yè)數(shù)據(jù)庫的運維成本。
雖然云數(shù)據(jù)庫可能比自建數(shù)據(jù)庫的價格貴一點,但是,云數(shù)據(jù)庫提供的完整的配套設(shè)施,如備份恢復(fù)、監(jiān)控報警、技術(shù)支持、數(shù)據(jù)庫高可用等,都會給企業(yè)數(shù)據(jù)庫穩(wěn)定性帶來巨大幫助。從長期來看,能夠大大節(jié)約企業(yè)的運維成本和人力成本。
另外,我特意去看了下阿里云的rds數(shù)據(jù)庫,有完整的備份恢復(fù)機制,而且七天內(nèi)的備份數(shù)據(jù)是不可刪除的。
所以,如果使用了云數(shù)據(jù)庫,那基本上不需要擔(dān)心數(shù)據(jù)丟失或者被人惡習(xí)刪除的問題了。
2、自建數(shù)據(jù)庫的完善備份機制
當(dāng)然,有的公司雖然使用了云數(shù)據(jù)庫,但是出于數(shù)據(jù)安全性的角度,還是會有自建數(shù)據(jù)庫的可能。
如果使用了自建數(shù)據(jù)庫,那么一定需要有完善的備份機制。
我司自從發(fā)生了誤操作刪除內(nèi)網(wǎng)數(shù)據(jù)的事件后,立刻引起重視,重新盤點梳理了核心數(shù)據(jù)的備份機制,包括云數(shù)據(jù)庫、自建數(shù)據(jù)庫,對于核心數(shù)據(jù)(包括但不限于生產(chǎn)數(shù)據(jù)、內(nèi)部核心數(shù)據(jù)等)必須實施定期全量備份,同時考慮末日容災(zāi),實施跨機房、跨云廠商的數(shù)據(jù)備份。
3、更健全的權(quán)限管理系統(tǒng)
除了數(shù)據(jù)備份外,我們還可以看到,數(shù)據(jù)庫權(quán)限管理的重要性。
尤其中小企業(yè),數(shù)據(jù)庫權(quán)限要么沒有管理,開發(fā)人員可以任意操作;要么是集中在少數(shù)幾個運維同事手上。
無論哪種,都不安全。
最好的方式,還是開發(fā)一個統(tǒng)一數(shù)據(jù)庫管理操作平臺(或者購買類似阿里云DMS產(chǎn)品),在系統(tǒng)層面進行數(shù)據(jù)庫的權(quán)限管控。
所有人員都只能通過這個平臺操作數(shù)據(jù)庫,同時,禁用危險命令,對高危操作進行分級審核。
《原力計劃【第二季】-?學(xué)習(xí)力挑戰(zhàn)》正式開始!即日起至?3月21日,千萬流量支持原創(chuàng)作者!更有專屬【勛章】等你來挑戰(zhàn)
推薦閱讀:如何與亦敵亦友的 null 說拜拜?大神原來是這么做的! 大數(shù)據(jù)成長之路:談?wù)勀切┍仨殞W(xué)習(xí)的Linux基礎(chǔ)知識 無需3D運動數(shù)據(jù)訓(xùn)練,最新人體姿勢估計方法達到SOTA | CVPR 2020 國產(chǎn) 14nm 迎曙光,進口荷蘭光刻機順利入廠! 從哈希函數(shù)、哈希沖突、開散列出發(fā),一文告訴你哈希思想與哈希表構(gòu)造到底是什么! 前端 Webpack 工程化的最佳實踐 真香,朕在看了!總結(jié)
以上是生活随笔為你收集整理的MySQL数据库无完整备份删库,除了跑路还能怎么办?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用5个Python库管理大数据?
- 下一篇: 官宣!2020年,这5类程序员要过苦日子