Xtrabackup 備份MySQL數據庫筆記

  • 創建 percona.repo 文件,內容如下
[percona-release-x86_64]
name = Percona Original release/x86_64 YUM repository
#baseurl = http://repo.percona.com/percona/yum/release/$releasever/RPMS/x86_64
baseurl = https://mirrors.cloud.tencent.com/percona/percona/yum/release/$releasever/RPMS/x86_64
enabled = 1
gpgcheck = 0
gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
[percona-release-noarch]
name = Percona Original release/noarch YUM repository
#baseurl = http://repo.percona.com/percona/yum/release/$releasever/RPMS/noarch
baseurl = https://mirrors.cloud.tencent.com/percona/percona/yum/release/$releasever/RPMS/noarch
enabled = 1
gpgcheck = 0
gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
[percona-release-sources]
name = Percona Original release/sources YUM repository
#baseurl = http://repo.percona.com/percona/yum/release/$releasever/SRPMS
baseurl = https://mirrors.cloud.tencent.com/percona/percona/yum/release/$releasever/SRPMS
enabled = 0
gpgcheck = 0
gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
  • 安裝
yum clean all
yum makecache fast
yum install percona-xtrabackup-24
  • 創建數據庫備份用戶
create user percona@localhost identified by '123456';
grant reload, lock tables, process, replication client on *.* to percona@localhost;
flush privileges;
  • 全量備份
xtrabackup --backup --rsync --parallel=4 --user=percona --password=123456 \
    --target-dir=/backup/$(date +mysql.%Y%m%d)
# --databases='db1 db2.t3', 只導出 db1 數據庫和 db2 中的 t3 表
# --databases-exclude='db4 db5.t6', 不導出 db4 數據庫和 db5 中的 t6 表,優先級高於 --database
# --databases-file=/path/to/filename, 指定包含要備份的數據庫的文件名,每行一個 db 或者 db.tb
# --tables='db1.t2 db3.t4', 只導出 db1 中的 t2 表和 db3 中的 t4 表
# --tables-exclude='db5.t6 db7.t8', 不導出 db5 數據庫的 t6 表和 db7 的 t8 表
# --tables-file=/path/to/filename, 指定包含要備份的數據表的文件名,每行一個 db.tb
# --safe-slave-backup, 備份前刷新 slave 臨時表,安全退出 slave sql 線程
# --slave-info 記錄 slave 讀取的 master binlog 的位置
# NFS 掛載時,需使用 sync 模式
  • 全量數據恢復
#準備恢復文件
xtrabackup --prepare --use-memory=2G --target-dir=/backup/
# --use-memory=2G 允許使用 2G 內存用於 prepare 數據,默認 100M
#停止數據庫並移除現有文件
systemctl stop mysqld
cd /var/lib && [ -d mysql ] && mv mysql mysql_bak
#拷貝數據備份文件並設置文件所屬
xtrabackup --copy-back --rsync --parallel=4 --target-dir=/backup/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
  • 增量備份
#第一次增量備份需基於一次全量備份,之後的每次增量備份則基於上一次的增量備份
xtrabackup --backup --rsync --parallel=4 --user=percona --password=123456 /
    --target-dir=/backup/$(date +mysql.%Y%m%d) --incremental-basedir=/backup/$(date -d '-1 day' +mysql.%Y%m%d)
# --incremental-basedir 前一次備份文件路徑
  • 增量備份恢復
systemctl stop mysqld
cd /var/lib && [ -d mysql ] && mv mysql mysql_bak
#先準備全量需要設置阻止回滾
xtrabackup --prepare --apply-log-only --use-memory=2G --target-dir=/backup/
# --apply-log-only 此選項阻止事物回滾,這對增量備份非常重要。
#準備好全量文件後再按順序將增量文件應用於全量文件
xtrabackup --prepare --apply-log-only  --use-memory=2G --target-dir=/backup/ --incremental-dir=/backup/$incremental
#按需完成增量文件的應用之後即可進行完整備份文件的拷貝恢復
xtrabackup --copy-back --rsync --parallel=4 --target-dir=/backup/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld

需要注意: 將增量文件應用於全量文件之後全量文件將無法再次用於數據恢復,會報錯日誌文件已損壞,建議使用增量恢復數據之後再次進行數據的全量備份以確保數據備份文件的可用性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章