Mysql備份與恢復(1)---物理備份


數據庫對企業來說最重要的莫過於其中的數據,所以做好數據庫的備份是一個不可或缺的工作。數據庫及時備份可以幫助我們在數據庫出現異常宕機時及時的使用備份數據進行恢復工作,將因為數據庫宕機產生的影響降低到最小。所以,本篇文章主要數據庫數據備份與恢復進行介紹。由於MyISAM存儲引擎中備份數據是將表保存到單獨的文件所以比較簡單,所以這里我主要針對InnoDB存儲引擎介紹備份與恢復機制。

全量備份與增量備份的區別

全量備份:

每次備份都進行全量備份,所以如果數據量大的情況下,進行全量備份會消耗較多的時間且對數據庫壓力比較大,但是由於全量備份每次都是最新的備份,所以恢復數據的時候效率更快。

增量備份:

只備份每天增量的日志,所以備份時效率更高對數據庫壓力也較小,但是恢復回復數據時就需要從全量備份日志加上每天的增量日志去進行恢復數據,所以恢復數據效率比較低。

Mysql數據備份大致分為2類:物理備份與邏輯備份。本篇文章我們先看看物理備份。

物理備份

物理備份分為熱備份和冷備份。

冷備份

冷備份是最簡單的備份方式,其實就是在備份數據時停掉Mysql服務,然后將data目錄下的數據文件拷貝到備份地址進行存儲。當Mysql出現宕機時,將備份文件拷貝到data目錄替換即可完成數據恢復。但是一般情況下不使用冷備份的方式,因為生產環境下一般都有業務在跑,所以不可能每次備份都停止Mysql服務去進行備份工作。

熱備份

快照備份

物理備份一般還有一種方式就是熱備份,熱備份相比於冷備份的好處在哪呢?熱備份可以在Mysql服務開啟的情況下執行備份操作,只是在熱備份時會添加只讀這類型的限制。熱備份第一種介紹的備份方式就是快照備份。快照備份其實就是將所有的數據文件放置在同一個分區,然后對這個分區進行快照備份,但是快照備份只能存儲在本地磁盤,如果本地磁盤出現故障,則可能出現快照備份數據的丟失。正是由於可能存在磁盤損壞導致數據丟失的情況下,所以生產環境下一般也不會使用熱備份去備份數據。

xtrabackup備份

熱備份另一種方式就是xtrabackup工具備份。xtrabackup工具2.3版本以下無法備份MyISAM存儲引擎,它可以備份5.1到5.7之間版本的InnoDB存儲引擎的數據。xtrabackup工具是基於InnoDB存儲引擎的crash-recovery功能,先復制物理文件,再根據log進行恢復,保證數據一致性。接下來我們可以一起看看xtrabackup工具如何進行備份工作。

  • 使用wget下載xtrabackup工具並使用yum命令安裝:
    file

  • 使用xtrabackup備份,命令為:

  • xtrabackup --backup --user=root --password='123' --target-dir=/backups/**

file

可以看到,全量備份完成會顯示當前備份的lsn號,下次進行增量備份就只會備份lsn大於此頁的數據。我們可以查看下我們剛才全量備份的數據:
file

可以發現目錄剛好和我們的數據庫一一對應,每個文件夾中實際上就是對應數據庫的備份數據。我們可以注意到根目錄下還有幾個文件,接下來我們來看下這幾個文件的具體用途:

  • ibdata1:共享表空間文件,創建數據庫時如果開啟innodb_file_per_table參數,才可以使用xtrabackup工具備份單個數據庫,否則默認都是全部數據庫都進行備份。

  • backup-my.cnf:此文件存儲一些my.cnf的有關於備份的配置信息。

  • xtrabackup_binlog_info:這個文件是用來記錄備份開始時二進制文件的位置。

  • xtrabackup_checkpoints:這個文件記錄備份的一些基本信息:比如備份開始和結束的lsn號,是全量備份還是增量備份等信息。

  • xtrabackup_info:這個文件記錄備份的概要信息。

  • xtrabackup_logfile:備份的日志。

  1. 將經過backup的數據進行prepare得到完整可用的數據,使用命令:
  • xtrabackup --prepare --use-memory=100M --target-dir=/backups

file

這里對命令幾個參數做下解釋:
--use-memory:該參數不帶則默認prepare操作占用100M內存,如果數據量大我們可以將use-memory指定更大的內存加快prepare工作。

--target-dir:備份文件所在路徑,我是放在/backups/。

  1. 恢復數據,恢復數據必須保證mysql中data目錄不能存在任何數據,否則會報錯。恢復數據實際上就是將備份數據拷貝到Mysql的data目錄下,恢復數據使用--copy-back參數。使用命令:
  • xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/

這里對命令幾個參數做下解釋:

--datadir:--datadir有兩個方法進行配置:可以在my.cnf文件中指定,如果my.cnf文件沒有指定該參數則恢復文件時必須指定--datadir參數。
--target-dir:備份文件所在路徑,我是放在/backups/。

接下來演示下如何進行數據恢復:
停止數據庫服務並且清掉data目錄下所有數據:
systemctl stop mysqld.service && rm -rf /var/lib/mysql/*

恢復數據:

  • xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/
    file

最后,重啟數據庫:

  • systemctl start mysqld.service

到這里備份數據就成功進行恢復到數據庫中了。當然更常用的備份方式其實是邏輯備份,使用Mysql自帶mysqldump工具進行備份操作,關於邏輯備份的知識將在下一篇進行講解。

歡迎關注公眾號:程序猿周先森。
file

歡迎關注公眾號:程序猿周先森。文章原創於微信公眾號,本平台不定時更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM