1. 程式人生 > >MySQL資料庫無完整備份刪庫,除了跑路還能怎麼辦?

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主要優勢:一個應用對

linux下啟用定時任務對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" # 資料庫表