Percona Xtrabackup小筆記


  • Xtrabackup原理
    Xtrabackup是基於InnoDB的crash-recovery機制來實現的,它複製InnoDB文件導致內部不一致,然後再對文件進行crash-recovery,以致於讓資料一致性並且是可用的資料庫。
  • 完整備份
    1. [root@mysql-course backup]# xtrabackup --user=root --password=pwd --host=127.0.0.1 \
    2. --port=3306 --parallel=4 --compress --compress-threads=4 --target-dir=/opt/backup/full \
    3. --backup
    看到下列訊息表示備份正常完成
    1. 161109 20:48:54 Executing UNLOCK BINLOG
    2. 161109 20:48:54 Executing UNLOCK TABLES
    3. 161109 20:48:54 All tables unlocked
    4. 161109 20:48:54 [00] Streaming ib_buffer_pool to
    5. 161109 20:48:54 [00] ...done
    6. 161109 20:48:54 Backup created in directory '/opt/percona57/data'
    7. MySQL binlog position: filename 'mysql-bin.000243', position '872', GTID of the last change '4bb4a153-8312-11e6-95a9-0800278d81c7:1-691'
    8. 161109 20:48:54 [00] Streaming backup-my.cnf
    9. 161109 20:48:54 [00] ...done
    10. 161109 20:48:54 [00] Streaming xtrabackup_info
    11. 161109 20:48:54 [00] ...done
    12. xtrabackup: Transaction log of lsn (8312487) to (8312512) was copied.
    13. 161109 20:48:55 completed OK!
  • 串流備份(Stream)
    本機:
    1. [root@mysql-course backup]# innobackupex --stream=tar /opt/percona57/data > bk.tar
    2. [root@mysql-course backup]# ls
    3. bak.tar

    #加gzip壓縮
    1. [root@mysql-course backup]# innobackupex --stream=tar /opt/percona57/data \
    2. |gzip > bk.tar.gz
    3. [root@mysql-course backup]# ls
    4. bak.tar.gz

    #也可用xtrabackup的--compress參數來壓縮,但就需要把stream的格式由tar改為xbstream
    1. [root@mysql-course backup]# innobackupex --compress --stream=xbstream /opt/percona57/data > bak.xbstream
    2. [root@mysql-course backup]# ls
    3. bak.xbstream

    遠端:
    1. [root@mysql-course backup]# innobackupex --stream=tar /opt/percona57/data \
    2. | ssh root@192.168.56.101 "cat - > /opt/bak.tar"
    要備份到遠端前請先設定讓Client端不需輸入密碼登入,否則會一直這個訊息:
    1. 161109 20:42:54 >> log scanned up to (8312496)
    2. xtrabackup: Generating a list of tablespaces
    3. InnoDB: Allocated tablespace ID 2 for mysql/plugin, old maximum was 0
    4. 161109 20:42:55 >> log scanned up to (8312496)
    5. 161109 20:42:56 >> log scanned up to (8312496)
    6. 161109 20:42:57 >> log scanned up to (8312496)
    7. 161109 20:42:58 >> log scanned up to (8312496)

    解串流備份的檔案:
    如果是用tar格式的檔案,當然就是用tar來解開就可以了,但如果是用xbstream格式的,則需要透過xbstream這支程式來解開:
    1. [root@mysql-course backup]# xbstream -x < bak.xbstream -C /opt/backup/full/
    2. [root@mysql-course backup]# ls -alh full/
    3. total 1.5M
    4. drwxr-xr-x 8 root root 4.0K Nov 9 21:00 .
    5. drwxr-xr-x 3 mysql mysql 50 Nov 9 20:58 ..
    6. -rw-r----- 1 root root 418 Nov 9 20:58 backup-my.cnf.qp
    7. -rw-r----- 1 root root 422 Nov 9 20:58 ib_buffer_pool.qp
    8. -rw-r----- 1 root root 1.4M Nov 9 20:56 ibdata1.qp
    9. drwxr-x--- 2 root root 4.0K Nov 9 20:57 mysql
    10. drwxr-x--- 2 root root 70 Nov 9 20:58 mytest
    11. drwxr-x--- 2 root root 8.0K Nov 9 20:57 performance_schema
    12. drwxr-x--- 2 root root 8.0K Nov 9 20:58 report
    13. drwxr-x--- 2 root root 8.0K Nov 9 20:57 sys
    14. -rw-r----- 1 root root 154 Nov 9 20:58 xtrabackup_binlog_info.qp
    15. -rw-r----- 1 root root 113 Nov 9 20:58 xtrabackup_checkpoints
    16. -rw-r----- 1 root root 537 Nov 9 20:58 xtrabackup_info.qp
    17. -rw-r----- 1 root root 545 Nov 9 20:58 xtrabackup_logfile.qp
    18. drwxr-x--- 2 root root 4.0K Nov 9 20:58 xx_report

  • 增量備份
    1. #第一次增量備份
    2. [root@mysql-course backup]# xtrabackup --host=127.0.0.1 --port=3306 --parallel=4 \
    3. --datadir=/opt/percona57/data --incremental-basedir=/opt/backup/full \
    4. --target-dir=/opt/backup/inc --backup
    5. #第二次增量備份
    6. [root@mysql-course backup]# xtrabackup --host=127.0.0.1 --port=3306 --parallel=4 \
    7. --datadir=/opt/percona57/data --incremental-basedir=/opt/backup/inc \
    8. --target-dir=/opt/backup/inc_2 --backup
  • 部份備份
    1. [root@mysql-course backup]# xtrabackup --databases="mytest.t1 mysql.user" --parallel=4 \
    2. --target-dir=/opt/backup/part --backup
    3. [root@mysql-course backup]# ls part/mysql/
    4. user.frm user.MYD user.MYI
    5. [root@mysql-course backup]# ls part/mytest/
    6. t1.frm t1.ibd
  • 還原
    完整還原的順序為:--decompress(如果有壓縮的話) => --prepare => --copy-back
    增量備份還原的順序為:--decompress(完整備份或增量備份如果有壓縮的話) => --prepare --apply-log-only(完整備份及有多份增量備份) => --prepare(只在最後一份增量備份執行) => --copy-back
    1. [root@mysql-course backup]# xtrabackup --decompress --target-dir=full
    2. [root@mysql-course backup]# xtrabackup --prepare --apply-log-only \
    3. --target-dir=/opt/backup/full
    4. [root@mysql-course backup]# xtrabackup --prepare --apply-log-only \
    5. --target-dir=/opt/backup/full --incremental-dir=/opt/backup/inc
    6. [root@mysql-course backup]# xtrabackup --prepare --target-dir=/opt/backup/full \
    7. --incremental-dir=/opt/backup/inc_2
    8. [root@mysql-course backup]# xtrabackup --target-dir=/opt/backup/full \
    9. --datadir=/opt/backup/new_data --copy-back
    註:
    [1] 解壓縮的時候會用到qpgress這支程式,如果沒安裝的話記得先去下載,否則會報錯
    [2] 還原的時候若沒有指定--datadir這個參數,它預設會抓/etc/my.cnf下的datadir來進行還原,但他也不會直接覆蓋,而是會報錯提醒您此目錄下已有檔案,建議是還原到新的目錄下,再用搬移的方式把還原的資料夾取代原本的資料夾

留言

這個網誌中的熱門文章

MySQL監控軟體MEM及PMM介紹

MySQL Router 設定檔說明

【工作筆記】SQL Timeout追蹤