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

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

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

全量備份:數據庫

每次備份都進行全量備份,因此若是數據量大的狀況下,進行全量備份會消耗較多的時間且對數據庫壓力比較大,可是因爲全量備份每次都是最新的備份,因此恢復數據的時候效率更快。segmentfault

增量備份:微信

只備份天天增量的日誌,因此備份時效率更高對數據庫壓力也較小,可是恢復回覆數據時就須要從全量備份日誌加上天天的增量日誌去進行恢復數據,因此恢復數據效率比較低。工具

Mysql數據備份大體分爲2類:物理備份與邏輯備份。本篇文章咱們先看看物理備份。spa

物理備份3d

物理備份分爲熱備份和冷備份。日誌

冷備份blog

冷備份是最簡單的備份方式,其實就是在備份數據時停掉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

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

相關文章
相關標籤/搜索