Skip to main content

xtrabackup 操作及安裝

這是一套針對 mysql 在線備份服務系統,那本篇會記錄該服務是怎麼安裝的

備份


  • 首先要先查詢目前 mysql 的版本是什麼
mysqld -v
  • 如果是 mysql 5.7 版本的話,請下載 2.4 版本下載頁面
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm
  • 下載好之後用 yum 方式來安裝,系統自動安裝一些關於該服務相依的套件服務
yum install percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm
  • 我們需要先針對系統做一些優化動作,針對檔案及網路上做一些限制上修改 vim /etc/sysctl.conf
fs.file-max = 51200
kernel.core_uses_pid = 1
kernel.msgmax = 65536
kernel.msgmnb = 65536
kernel.shmall = 4294967296
kernel.shmmax = 68719476736
kernel.sysrq = 0
net.core.netdev_max_backlog = 262144
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.somaxconn = 262144
net.core.wmem_default = 8388608
net.core.wmem_max = 16777216
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.ip_forward = 0
net.ipv4.ip_local_port_range = 1024    65000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_sack = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_wmem = 4096        16384   4194304
kernel.pid_max=1048576
kernel.threads-max=1048576
vm.max_map_count=1048576

fs.inotify.max_user_instances = 128000
fs.inotify.max_user_watches = 8192000
fs.inotify.max_queued_events = 1638400

  • 修改檔案上限(這個修改完要重啟系統才會生效) vim /etc/security/limits.conf
*     soft   nofile    100000
*     hard   nofile    100000
*     soft   nproc     100000
*     hard   nproc     100000
*     soft   core      100000
*     hard   core      100000
  • vim /etc/pam.d/su 貼到最工行
session required   pam_limits.so
  • 開啟檔案數暫時生效
ulimit -n 20480
  • 全備
innobackupex --defaults-file=/etc/my.cnf --host=127.0.0.1 --port=3306 --user=root --password=****** ./restore
  • 增量備份
innobackupex --defaults-file=/etc/my.cnf --host=127.0.0.1 --port=3306 --user=root --password=****** --incremental ./restore/incer1 --incremental-basedir=./restore/2022-04-23_11-39-31
  • 第二次增量
innobackupex --defaults-file=/etc/my.cnf --host=127.0.0.1 --port=3306 --user=root --password=****** --incremental ./restore/incer2 --incremental-basedir=./restore/incer1/2022-04-23_11-47-10

還原


  • 還在之前要先把 mysql 服務要先停用
systemctl stop mysqld
  • 用之後再將原本的 my.cnf 放入到預設位置下 /etc 原在 /etc 目前下 my.cnf 此檔先修改掉
要注意一下 my.cnf 裡面檔案存放路徑在那
如果在預設目前以外的地方請先建立好相同的目錄。例如:
datadir=/volume1/mysql
  • 建立完成之後再回您所放置的備份檔的路徑,下一段指令
innobackupex --apply-log --use-memory=4G --redo-only 備份檔路徑
# 例如:
innobackupex --apply-log --use-memory=4G --redo-only BASE-DIR
  • 將差異備份檔與完整性備份檔合併
innobackupex --apply-log --use-memory=4G --redo-only 完整備份檔路徑 --incremental-dir=差異備份檔路徑  
# 例如:
innobackupex --apply-log --use-memory=4G --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
# 回滾未完成的日誌
innobackupex --apply-log BASE-DIR
  • 多檔差異備份檔與完整性備份檔合併
innobackupex --apply-log --use-memory=4G --redo-only 完整備份檔路徑 --incremental-dir=差異備份檔路徑  
# 例如:
innobackupex --apply-log --use-memory=4G --redo-only BASE-DIR  --incremental-dir=INCREMENTAL-DIR-1
# 第二個不需 --redo-only 此參數
innobackupex --apply-log --use-memory=4G BASE-DIR  --incremental-dir=INCREMENTAL-DIR-2
# 回滾未完成的日誌
innobackupex --apply-log BASE-DIR 

完整備份目錄,daily.0是指第一次的增量備份,daily.1是指第二次的增量備份,以此類推。這裡要注意的是:最後一步的增量備份並沒有 --redo-only 選項!還有,可以使用 --use-memory 提高性能。

還原之前要先注意要還原目錄下要是空不能有資料

  • 跑完之後就可以開始還原資料庫了
innobackupex --defaults-file=/etc/my2.cnf --copy-back 備份檔的路徑
例如:
innobackupex --defaults-file=/etc/my.cnf --copy-back BASE-DIR 
  • 還原完之後再將該目錄權限設定為 mysql
chown -R mysql:mysql /var/lib/mysql
  • 參考文件請看附件

參考相關網站