xtrabackup的流備份恢復MySQL從庫


背景

從庫出問題了,需要重做從庫。一般的恢復方法是在主庫上xtrabackup物理熱備,然后拷貝備份文件到從庫恢復。但這次遇到一個問題,主庫數據目錄有300G,而磁盤剩余空間只有100G,於是這次可以采用xtrabackup的流備份恢復從庫。流備份可以邊備份邊壓縮邊傳輸,不會占用本地空間。

服務器列表

服務器 角色
192.168.199.198 master
192.168.199.199 slave

xtrabackup的流備份恢復MySQL從庫步驟

1.從庫關閉MySQL,並移除數據目錄

kill -9 $MYSQLD_PID
cd /database/mysql/3306/
rm -rf data

2.主庫上授權 (如果無授權)

grant reload,lock tables,replication client,process on *.* to backup@'%' identified by 'fanderpassword';
grant replication slave,replication client on *.* to repl@'%' identified by 'fanderpassword';

3.主庫和從庫上分別安裝xtrabackup

# 請到percona官網下載對應操作系統版本的rpm包
# 我這里下載的是centos6版本
# wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.14/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.14-1.el6.x86_64.rpm

# 實際上測試發現,解壓直接拷貝xtrabackup、xbstream文件也可以用

# 百度下載qpress, centos6、centos7通用,直接拷貝可以用

cp xtrabackup xbstream qpress /usr/sbin
chmod +x /usr/sbin/xtrabackup
chmod +x /usr/sbin/xbstream
chmod +x /usr/sbin/qpress

快捷通道: https://pan.baidu.com/s/179mV0QidiiMqdROGUFBZXQ 提取碼: vcvg

4.主、從庫分別建備份目錄

mkdir -p /data/backups/2019061

5.主庫上發起流備份,並通過管道傳輸到從庫解包

xtrabackup -ubackup -pfanderpassword -H127.0.0.1 -P3306 \
 --backup \
 --stream=xbstream \
 --compress \
 --target-dir=/data/backups/20190618 | ssh root@192.168.199.199 "xbstream -x -C /data/backups/20190618"

!!雖然設置了主庫本地備份的路徑/data/backups/20190618,但觀察可以發現其不會占用空間。

6.從庫上解壓,解壓后刪除原壓縮文件

xtrabackup --decompress --parallel=4 --remove-original --target-dir=/data/backups/20190618

7.從庫上prepare階段,應用redo log

xtrabackup --prepare --use-memory=1GB --target-dir=/data/backups/20190618

8.從庫采用move-back方法,把應用好的數據恢復到數據目錄

xtrabackup --defaults-file=/data/mysql/mysql3306/my.cnf --move-back --parallel=4 --target-dir=/data/backups/20190618

注意:這里有一個坑,不要設置innodb_log_group_home_dir =./ ,xtrabackup會讀錯路徑,導致無法拷貝,解決辦法是注釋掉這條參數。

9.從庫修改數據目錄權限

chown -R mysql:mysql /database/mysql/3306

10.從庫啟動數據庫

service mysqld start

11.從庫修改gtid編號

[root@192-168-199-199 data]# cat /data/mysql/mysql3306/data/xtrabackup_info |grep binlog_pos
binlog_pos = filename 'mysql-bin.000009', position '190', GTID of the last change 'c0900221-709b-11e9-b8ea-000c29abbade:1-1539006'

mysql>  reset master;
mysql>  set global gtid_purged="c0900221-709b-11e9-b8ea-000c29abbade:1-1539006"

12.從庫啟動復制

mysql> CHANGE MASTER TO
        MASTER_HOST='192.168.199.198',
        MASTER_USER='repl',
        MASTER_PASSWORD='fanderpassword',
        MASTER_PORT=3306,
        MASTER_AUTO_POSITION=1;

mysql> start slave;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM