首頁  >  文章  >  資料庫  >  用xtrabackup備份mysql資料庫方法指導

用xtrabackup備份mysql資料庫方法指導

巴扎黑
巴扎黑原創
2017-07-19 11:32:031023瀏覽

xtrabackup是由percona提供的mysql備份工具,它是一款實體備份工具,透過連接資料庫把資料庫的資料備份出來。對於innodb儲存引擎其支援全量備份和增量備份。對於myisam儲存引擎只支援增量備份。因為xtrabackup對innodb的增量備份是基於表空間的LSN進行的,所謂LSN即:表空間分成多個資料塊,每個資料塊都有相應的序號,當資料塊資料發生變化則更新序號。全量備份即備份所有資料區塊,則增量備份則基於全量備份最後一個資料區塊的序號到最新的資料區塊序號進行備份。因為myisam不支援表空間,所以不能進行增量備份。

Xtrabackup是由percona提供的mysql資料庫備份工具,根據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb資料庫進行熱備的工具。

Xtrabackup中主要包含兩個工具:

xtrabackup:是用於熱備份innodb, xtradb表中資料的工具,不能備份其他類型的表,也不能備份資料表結構;

innobackupex:是將xtrabackup進行封裝的perl腳本,可備份並還原MyISAM表以及資料表結構。


xtrabackup備份出來的資料包括:

  • 表空間

  • 資料檔

  • 二進位日誌

  • #交易日誌
    ...

xtrabackup在進行資料復原之前需要注意以下要點:

  1. 如果有增量備份則需要在復原之前先進行增量備份和全備份的合併再還原;

  2. #如果是支援交易的表的備份,則恢復之前需要先進行交易日誌的回滾和提交操作;

  3. ##如果是多個連續的備份操作,則只需要提交交易日誌,不需要回滾,只有在全部備份操作合成之後再進行事務的回滾;

此文通過詳細的實驗步驟來演示xtrabackup的使用方法。


實驗步驟

  1. 一台centos7虛擬機,安裝mariadb-5.5.52版本的資料庫,首先透過sql腳本導入hellodb測試庫,其包括一個students資料表,此實驗在students表中進行操作,指令如下:


    mysql -uroot < hellodb.sql

  2. 安裝xtrabackup,可以從官方網站下載安裝包,然後透過yum進行安裝,下載網站為:,此處不再示範安裝過程;

  3. xtrabackup的主要指令為innobackupex,透過innobackupex --help或者man手冊可以取得到幫助資訊;

  4. 資料庫已經導入,此時可以進行資料庫的備份操作,先進行資料庫的全量備份與還原:

  • #xtrabackup_binlog_info:記錄二進位日誌的內容;

  • xtrabackup_checkpoints:記錄備份類型,開始和結束的lsn編號等備份資訊;

  • #xtrabackup_info:記錄更詳細的備份訊息,如是否為所有庫備份,是否壓縮,備份執行的命令等信息;

  • xtrabackup_logfile:記錄的是事務日誌,為二進位文件,不可查看;

  1. 首先確保資料庫已開啟二進位日誌,透過

    show global variables like 'log_bin';指令可以看到是否已經開啟,透過show binary logs;可以看到目前正在使用的二進位日誌是哪一個;

  2. 透過xtrabackup進行備份,數據備份到/data/backup目錄下,備份完成會在指定目錄下產生一個以目前時間命名的資料夾:


    innobackupex -u root /data/backup

  3. #資料夾內容如下:


    用xtrabackup備份mysql資料庫方法指導

  4. 此時就備份成功了,然後示範資料庫的復原作業。注意:復原前需要先停止資料庫服務:


    innobackupex --apply-log 2017-07-13_21-02-07/ #先進行交易日誌的提交與回滾    innobackupex --copy-back 2017- 07-13_21-02-07/ #進行資料恢復,會自動把資料恢復到mysql的資料目錄下

  5. 恢復成功之後所有已經恢復資料的屬主和屬組都是root用戶,需要修改成mysql用戶才能登陸資料庫;

  6. 此時登陸資料庫即可看到所有資料都已經恢復了。

  • 這次示範增量備份與復原作業:

    • #生產環境建議二進位日誌與資料檔分開放在不同磁碟,因為二進位檔案可以用來進行時間點恢復,可以盡可能保證丟失更少的數據,如果二進位檔案也丟失,則可能會丟失大量資料;

    • 在資料復原作業完成之後一定要再進行一次資料的完整備份,確保資料安全;

    1. 往資料庫中插入幾個新的信息,然後進行資料庫的增量備份;

    2. 透過以下指令進行資料庫的增量備份,備份成功之後還是會在/data/backup目錄下生成一個新的以時間命名的資料夾:
      innobackupex -u root -p 1234567a --incremental --incremental-basedir=/data/backup/2017-07-13_21-07-23/ /data/ backup/

    3. 然後停掉資料庫服務,刪除資料庫目錄下的所有數據,進行資料復原操作,步驟如下:
      innobackupex --apply- log --redo-only 2017-07-13_22-16-19/ #進行全量備份的事務提交,但是不回滾未提交事務,因為未提交事務可能在下次的增量備份中提交    innobackupex --apply- log --redo-only 2017-07-13_22-16-19/ --incremental-dir=2017-07-13_22-18-34/ #進行增量備份和全備份的合成已經事務提交工作    innobackupex --apply -log 2017-07-13_22-16-19/ #全備份也沒有完成的交易進行回滾作業    innobackupex --copy-back 2017-07-13_22-16-19/ #此時採用全備備份即可恢復數據,不再需要增量備份,因為已經進行了備份的合成操作

    4. 同樣需要修改恢復完成數據的屬主和屬組,然後登陸資料庫即可看到完整是數據,此時實驗展示完成。

      注意:

    以上是用xtrabackup備份mysql資料庫方法指導的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn