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
- 參考文件請看附件