MySQL資料庫無完整備份刪庫,除了跑路還能怎麼辦?
1.背景
前段時間,由於運維同事的一次誤操作,清空了內網核心資料庫,導致了公司內部管理系統長時間不可用,大量知識庫內容由於沒有備份險些丟失。
結合這兩天微盟的刪庫跑路事件,我們可以看到,資料庫的備份與恢復顯得尤為重要。
本文將對此次內網資料恢復過程做一些整理,介紹刪庫後的搶救方案。
同時,引發對資料庫穩定性的思考。
2.資料搶修
這份內網資料事先沒有特意備份,所以一開始認為需要從磁碟恢復資料了。所以緊急聯絡了資料恢復公司,希望過來恢復磁碟資料。
這裡需要注意,資料恢復公司建議馬上關機,避免磁碟資料被覆蓋。
聯絡資料恢復公司的同時,運維同事在內網找到了幾個殘缺的備份檔案,包括去年4月份的一個全量備份資料、今年2月初一個半全量備份資料(備份到r開頭的表就失敗了,剩餘表沒有備份),以及近7天到binlog日誌檔案。
所以立刻進行另一套恢復方案:
1)用今年2月初的半全量資料恢復一個庫A
2)用去年4月份的全量資料恢復一個庫B
3)將B資料庫中r開頭之後的表拷貝一份到資料庫A中
4)資料庫A中重放近3天的binlog。(注意,binlog回放時間截止到drop命令時間之前)
2.1 dump檔案恢復
一開始想通過阿里雲,把dump檔案恢復到rds上。
結果發現需要super許可權,而這個許可權是阿里雲高許可權賬號(另外還有普通賬號)也不具備的,問了阿里雲也不提供。因此,無法恢復到rds。
所以我們只能把dump檔案恢復到本地資料庫。
在ECS上建立一個mysql資料庫,然後就是dump檔案恢復。
有兩種方式:
1)命令列恢復
mysql -u root xxxdb < xxxx-backup.sql
2)在mysql客戶端中恢復
用root登陸後
use xxxdb;
source /data/xxxx-backup.sql
2.2 binlog檔案重放恢復
基於起止時間恢復資料
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中的哪個資料庫進行匯入,否則,如果binlog中有多個庫的操作記錄,會大量報錯。
更多binlog命令引數見:
https://dev.mysql.com/doc/refman/5.6/en/mysqlbinlog.html#option_mysqlbinlog_database
-f 用於mysql命令,重建過程中如果遇到問題會繼續執行而不是中斷退出。
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'.
3 資料備份
資料備份可以有多種方式,這裡介紹三種
3.1 本地dump備份資料檔案
比較方便儲存,不過用起來限制也比較多,容易中斷。
mysqldump --max_allowed_packet=1024M -u root xxxxdv > 20200219.sql
3.2 阿里雲dts遷移備份
可以在阿里雲上建一個dts遷移任務(遷移任務基本免費,同步任務收費),然後通過dts將源資料庫直接遷移到rds、ecs自建資料庫、vpc網路下到自建資料等地方。
可以避免dump還原的過程。
需要有個目標庫,備份不是以簡單的資料檔案形式,而是一個備份資料庫的形式。
3.3 xtrabackup(簡稱xbk)
https://www.percona.com/software/mysql-database/percona-xtrabackup
基於拷貝物理檔案和redo來實現備份。
4. 資料庫穩定性思考
不管是運維的誤操作,還是像微盟這樣的惡性事件,從根本上反映了企業資料庫穩定性管理的不足。
任何事後搶救的措施,都比不上事前的謹慎防範。
如何提高企業資料庫的穩定性,避免出現類似這樣的事情呢?
1)統一技術棧,使用雲廠商的雲資料庫
從現在雲技術的發展來看,以阿里雲、華為雲等大廠提供的雲資料庫,能大大降低企業資料庫的運維成本。
雖然雲資料庫可能比自建資料庫的價格貴一點,但是,雲資料庫提供的完整的配套設施,如備份恢復、監控報警、技術支援、資料庫高可用等,都會給企業資料庫穩定性帶來巨大幫助。從長期來看,能夠大大節約企業的運維成本和人力成本。
另外,我特意去看了下阿里雲的rds資料庫,有完整的備份恢復機制,而且七天內的備份資料是不可刪除的。
所以,如果使用了雲資料庫,那基本上不需要擔心資料丟失或者被人惡習刪除的問題了。
2)自建資料庫的完善備份機制
當然,有的公司雖然使用了雲資料庫,但是出於資料安全性的角度,還是會有自建資料庫的可能。
如果使用了自建資料庫,那麼一定需要有完善的備份機制。
我司自從發生了誤操作刪除內網資料的事件後,立刻引起重視,重新盤點梳理了核心資料的備份機制,包括雲資料庫、自建資料庫,對於核心資料(包括但不限於生產資料、內部核心資料等)必須實施定期全量備份,同時考慮末日容災,實施跨機房、跨雲廠商的資料備份。
3)更健全的許可權管理系統
除了資料備份外,我們還可以看到,資料庫許可權管理的重要性。
尤其中小企業,資料庫許可權要麼沒有管理,開發人員可以任意操作;要麼是集中在少數幾個運維同事手上。
無論哪種,都不安全。
最好的方式,還是開發一個統一資料庫管理操作平臺(或者購買類似阿里雲DMS產品),在系統層面進行資料庫的許可權管控。
所有人員都只能通過這個平臺操作資料庫,同時,禁用危險命令,對高危操作進行分級稽核。
看到這裡了,原創不易,點個關注、點個贊吧,你最好看了~
知識碎片重新梳理,構建Java知識圖譜:https://github.com/saigu/JavaKnowledgeGraph(歷史文章查閱非常方便)
掃碼關注我的公眾號“阿丸筆記”,第一時間獲取最新更新。同時可以免費獲取海量Java技術棧電子書、各個大廠面試題。
相關推薦
MySQL資料庫無完整備份刪庫,除了跑路還能怎麼辦?
1.背景 前段時間,由於運維同事的一次誤操作,清空了內網核心資料庫,導致了公司內部管理系統長時間不可用,大量知識庫內容由於沒有備份險些丟失。 結合這兩天微盟的刪庫跑路事件,我們可以看到,資料庫的備份與恢復顯得尤為重要。 本文將對此次內網資料恢復過程做一些整理,介紹刪庫後的搶救方案。 同時,引發對資料庫穩定性的
刪庫後除了跑路還能幹什麼?
[TOC] ### 前言 Hi,歡迎訂閱白日夢的MySQL專題! 這篇文章我們一起閒聊,如果你不小心把MySQL中的資料刪了,除了跑路還能幹啥? 看完本篇你將瞭解:常見的資料庫備份方式、mysqldump實戰、一條binlog長啥樣、什麼是gtid?什麼是binlog位點?mysqlbinlog資
mysql資料庫的完整備份、差異備份、增量備份
完整備份:(t為資料庫名) Mysql -uroot -pPassword t -e "FLUSH TABLES"; // 關閉所有開啟的表, 把記憶體中的快取寫入磁碟 Mysql -uroot -pPassword t -e "FLUSH TABLES WITH
學會這個刪庫再也不用跑路了~ --技術流ken
前言 相信每一個學IT的人或多或少都聽說過從刪庫到跑路這個梗~下圖也是在各種交流群屢禁不止,新人聽著也是瑟瑟發抖。 人們茶餘飯後,街頭巷角難免要問。。。 下面技術流ken就教給各位新手們一招刪庫再也不用跑路的絕技~
幹貨,不小心執行了rm -f,除了跑路,如何恢復?
命令 索引節點 目錄 情況 復數 shel alt 分享 pre 前言 每當我們在生產環境服務器上執行rm命令時,總是提心吊膽的,因為一不小心執行了誤刪,然後就要準備跑路了,畢竟人不是機器,更何況機器也有bug,呵呵。 那麽如果真的刪除了不該刪除的文件,比如數據庫、日誌或執
資料庫定時備份原理,實現MySQL資料庫的實時備份
www.syncnavigator.cn SyncNavigator 做資料同步時所支援的資料庫型別: 支援sqlserver 2000-2014所有版本,全相容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。 來源資料庫和目標資料庫可以版本不同,比如:來源資料庫
mysql資料庫--檢視的簡介及使用,資料的備份與還原
檢視: 檢視:view,是一種有結構(有行有列)但是沒結果(結構中不存在真實的資料)的虛擬表,虛擬表的結構來源不是自己定義, 而是從對應的基表中產生(檢視的資料來源)。 建立檢視: 基本語法:create view 檢視名字 as select 語句; -- sele
mysql定時執行某一儲存過程,並實現mysql資料庫的定時備份
mysql儲存過程 1、儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。 語法:CREATE PROCEDURE 過程名([[IN|OU
mysql修改編碼(數據庫,表,字段)
char park true ID mysql nbsp pan gbk 所有 查看各個編碼 //查看字段編碼 SHOW FULL COLUMNS from park_car_user; //查看數據庫字段SHOW CREATE DATABASE db_nam
mysql資料庫的簡單增刪改查,合併欄位,拼接字元操作,用java完成將一張表中的查詢結果合併存入另一張表的指定欄位
首先問題描述:我現在有兩個表,一個表是關鍵詞,一個表是含有關鍵詞的標籤,需要做的就是在關鍵詞表中新建一個標籤欄位,把包含該關鍵詞的全部標籤存入其中。比如關鍵詞是Java,標籤可能有Java開發,Java後臺等。我這裡關鍵詞有4000個,標籤有40000個,我用了小段java程式碼+sql的函式就完成
Mysql資料庫技術——MEB備份技術
使用MEB進行mysql備份 MEB是一個mysql官方的備份工具,具有 使用meb時,我們先需要在mysql 的配置檔案中新增必要引數 [[email protected] mysql]# vim /etc/my.cnf [mysqld] datadi
程式設計師的第一次刪庫,發同學群問怎麼恢復,同學:趕緊跑路吧,跑快點
不小心刪庫是一種怎樣的體驗? 刪過庫的人不可能坐著在這回答這個問題的,應該說,來回答問題的都是恢復回來的。或者想要回答這個的小夥伴可以親自去體驗,到時自然而然就懂了,是吧! 近日,又有一位程式設計師刪庫了。為什麼是又呢?因為網上太多的例子了,上面就是一個。 不過看這連天
進入MySQL資料庫的大門(學習筆記,有你就夠了)
一、初識資料庫 1、什麼是資料庫 資料庫叫database ,簡稱DB,是長期存放在計算機內,有組織、可共享的大量資料的集合;資料庫就是存放資料的倉庫,專業的資料庫系統具有較小的資料冗餘度,較高的資料安全性,易擴充套件性。 資料庫設計原則: mysql主要優勢:一個應用對
資料庫中資料的刪選,排序,分組和函式的使用
Select (關鍵字) from(表)where(列) 查詢固定的條件的 Select *from 學生資訊 where 姓名=’女’ and 家庭住址=‘河南’ Select *from 學生資訊 where 家庭住址like‘河南’ 排序(對於考試編號為101的成績進行排序) Select * f
mysql資料庫用ip地址連線時,報錯:1130-host . is not allowed to connect to this MySql server,MySQL
解決方法:授權法。 例如,你想myuser使用mypassword從任何主機連線到mysql伺服器的話。 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT O
Linux 下實現 MySQL 資料庫定時自動備份
備份是什麼? 為什麼要備份? 容災方案建設 儲存介質 光碟 磁帶 硬碟&n
linux下如何實現mysql資料庫每天自動備份定時備份
www.syncnavigator.cn SyncNavigator 做資料同步時所支援的資料庫型別: 支援sqlserver 2000-2014所有版本,全相容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。 來源資料庫和目標資料庫可以版本不同
linux下使用crontab如何實現mysql資料庫每天自動備份定時備份
直接上教程,基本上出現的問題都在下面了; 首先檢查你的伺服器是否安裝了crontab,命令如下: 命令: crontab 如果提示-bash: crontab:commandnot fo
mysql資料庫多表備份及excel表格匯出指令碼編寫
#!/bin/sh # Database info DB_USER="root" DB_PASS="min" DB_HOST="localhost" DB_NAME="product" # 資料庫表