MySQL資料備份方法的選擇與思考

2022-09-21 23:48:13 字數 2485 閱讀 8654

gfjooelts      從事dba的行業也有兩年多了,在資料備份上無論是理論和實踐上,都積累了一些經驗,恰逢這兩天又出現一些資料備份方面的問題,這裡,我將之前遇到過的資料備份方法簡單做個整理。

我們都知道,保障資料庫的穩定、安全、高效執行,是dba的工作職責所在。對於dba來講,要想實現資料安全,資料備份可能是至關重要的乙個環節。

我曾經就遇到過乙個案例,業務方誤刪資料引發故障,要求dba恢復資料,結果發現當天的資料沒有備份,場面一度十分尷尬,本來這個故障是業務引發的,但是由於沒有資料備份,最後業務和dba各打五十大板,一起背鍋。如果業務沒有要求dba恢復資料,那麼dba程式設計客棧完全可以後續悄悄的將資料備份,最後就可以免於被牽連,當然,生產環境沒有如果。

備份的重要性,自然不言而喻,那麼我們常見的備份思路,都可程式設計客棧以有哪些呢?根據備份是否影響線上環境,大體可以分為冷備、熱備2種方法,其中冷備可以理解是對線上業務有影響,需要離線備份,而熱備是對線上業務沒有影響或者影響比較小。

我自己總結了以下方法:

這種方法比較暴力,就是直接停止mysql資料庫,然後通過cp、rsync這種linux物理檔案複製命令,來實現資料的備份。

其中:cp特指的是備份到當前伺服器的其他目錄

rsync特指的是備份到其他伺服器上

這種方法,要注意下面幾點:

a、那對於線上環境來講,rsync的方法會更好,因為如果伺服器宕機了,cp方法備份也會不可用。

b、rsync和cp的方法,都需要在主從架構的從庫上,或者是指定備份庫上進行。(這裡我推薦線上環境使用一主一從一備份的複製架構)

冷備份的最大的優點是速度快、操作簡單。

適合大資料庫的日常備份。

這種方法,其實往往不能叫做備份,因為它其實只備份了乙個表的資料,但是它非常有用。

試想這樣一種場景,業務方讓你update幾百條資料,而表中的資料有上千萬條,這個時候,如果備份全表,就顯得不那麼靈活,而且耗費的時間較長。如果我們使用select的語法,將這些需要修改的資料,先儲存到乙個txt的檔案中,即使update之後,業務反饋和預期不符,也能快速的找到update之前的樣子,可以極大的縮短你恢復資料的時間。

這種備份方法適合單個表的某一部分資料變更前的備份。

在mysql中,這種備份方案相對比較少,在mongodb中,延時從庫非常常見。但是延時從庫是一種比較好的**備份手段,它最主要的特點是恢復的可能性高。

有些時候,你辛苦備份的資料,在其他伺服器上,因為各種依賴或者版本問題,導致無法還原乙個mysql例項,這就比較尷尬,而延時從庫可以很好的解決這個問題,因為本身從庫是執行中的,所以不用擔心庫起不來的情況。

延時從庫的備份方案中,要控制從庫的延時時間,如果設定的過短,可能在主庫上引發問題的sql已經在從庫上執行過了,那麼就起不到延時的效果,那延時從庫就失去意義了。

這可能是最常見的一種mysql備份方式了,mysqldump這個官方提供的備份工具,可以提供給你某個時間點的一致性快照,可以很清楚的知道當前的時間點,mysql資料庫執行到了那個binlog的位點,恢復的精確性很高。而www.cppcns.com且,它支援指定庫表備份等,功能非常強大。

它適合資料量在50g以下的資料庫備份,超過50g,恢復的時候會特別慢。

這個不必多說,大家都知道。

記得加--single-transaction,要不然可能會出現鎖表,業務無法寫入的問題,曾經有個小兄弟在這裡栽倒了。

它的特點是能夠給你某個時間點的資料庫快照,而且備份檔案總體比較小。

這是另外一種熱備份的方式,xtrabackup備份方式可以在不影響資料庫寫入的情況下對資料庫進行熱備,本質其實還是物理檔案拷貝,比mysqldump的速度要快。

如果主庫讀寫壓力比較小,則可以在主庫上直接備份。不過還是建議不要在主庫上使用,因為曾經出現過線上主庫寫入壓力比較大,xtrabackup直接把主庫備份宕機的情況出現,從庫上不停庫進行xtrabackup才是相對比較安全的方法。

它的特點是備份速度快,備份對線上影響比較小。

binlog備份本質上還是sql語句的備份,類似mysqldump的結果,不過binlog中保留的資料比mysqldump保留的資料多一些。

如果你擁有這個資料庫從啟動開始所有的binlog,毋庸置疑,你可以將這個資料庫還原出來。但是所有的binlog必定是乙個比較比較大的資料量,一般很難保留全量日誌,所以binlog備份一般情況下需要搭配快照備份。

我們可以在乙個從庫上線停掉複製關係,然後flush log新生成乙個binlog,記錄為binlog0,然後將這個從庫完整的備份拷貝乙份,之後儲存binlo往後的所有binlog,這樣就能利用從庫的完整備份+binlog的方法來恢復從庫的資料。

binlog備份適用於那些binlog寫入速度一般的資料庫,如果你的資料庫binlog重新整理的速度很快,那資料容量可能會成為瓶頸。

clone plugin是8.0的乙個亮點功能,既可以支援資料備份到本地,也可以支援快速遠端拉起乙個資料庫的從庫,是乙個值得研究的備份方法。之前的文章中也有詳細些過,有興趣可以去看。也可以參考官方文件。

但是目前,線上環境使用的比較少,原因是大部分國產資料庫目前都停留在mysql5.7版本,當然,8.0是趨勢,沒公升級的趕快公升級吧。

mysql 備份源資料 mysql 資料備份與還源

一 資料備份 1 使用mysqldump命令備份 mysqldump命令將資料庫中的資料備份成乙個文字檔案。表的結構和表中的資料將儲存在生成的文字檔案中。mysqldump命令的工作原理很簡單。它先查出需要備份的表的結構,再在文字檔案中生成乙個create語句。然後,將表中的所有記錄轉換成一條ins...

MySQL 資料備份與還原方法總結

mysqldump 是 mysql 自帶的乙個命令,能夠將資料庫轉換為 sql 檔案。但這種方法對於大量資料效率較低。mysqldump u user h host p dbname tbname tbname.filename.sql嘗試將遠端 linux 伺服器的 mysql 資料庫備份到本地來...

mysql 備份 為MySQL選擇合適的備份方式

資料庫的備份是極其重要的事情。如果沒有備份,遇到下列情況就會抓狂 update or delete whitout where table was dropped accidentally innodb was corrupt entire datacenter loses power 從資料安全的...