Xtrabackup在線熱備搭建基於GTID模式主從架構詳解

應用初始階段都是mysql單庫支撐,隨着應用的訪問量不斷增長,數據庫壓力越來越大,就需要考慮搭建主從架構,從而拓展整個數據庫層面的吞吐能力,所以不停mysql服務做從庫是DBA必須掌握的基礎技能之一,percona提供了xtrabackup實現在線熱備做從庫,下面就講解下具體的實現步驟:

NO.1 配置SSH

ssh-keygen -t rsa 生成密匙
在這裏插入圖片描述

2.用ssh-copy-id將公鑰複製到遠程機器中

ssh-copy-id -i .ssh/id_rsa.pub root@remoteIP
在這裏插入圖片描述
拷貝過程中需要輸入一次密碼。成功之後就可以直接ssh remoteIP.

NO.2 初始化備份工具xtrabackup以及qpress

工具包準備以及安裝

這裏我用的官方的二進制包:
在這裏插入圖片描述
qpress:http://www.quicklz.com/qpress-11-linux-x64.tar
執行初始化安裝腳本

#!/bin/bash 
#install xtrabackup 
cd /home
tar -zxvf percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt145.tar.gz
mv percona-xtrabackup-2.4.12-Linux-x86_64 /usr/local/xtrabackup
ln -sf /usr/local/xtrabackup/bin/* /usr/bin/ 
xtrabackup --version

#install qpress 
tar xvf qpress-11-linux-x64.tar
cp qpress /usr/bin
qpress --help

NO.3 檢查文件句柄數設置

經常由於之前沒有設置足夠大的值,導致報too many file err錯誤。

句柄設置方式:

1)永久生效方式:

vim /etc/security/limits.conf
#添加兩行:
* soft nofile 65535  
* hard nofile 65535

2)臨時修改方案:

ulimit -SHn 65535

NO.4 開發備份腳本

#!/bin/bash 
#數據庫用戶名
dbuser='bakup'
#數據庫用密碼
dbpasswd='123456'
#hosts
dbhost='127.0.0.1'
#日誌備份路徑
logpath='/home/xtrabackup'
#日誌記錄頭部
tmpdir='/home/xtrabackuptmp'
#遠程機器目標位置
remoteDir='/home/databack/'
#遠程機器目標位置
remoteIp='192.168.1.1'
#遠程機器賬戶
remoteUser='root'

xtrabackuplogpath='/home/xtrabackuplog1.log'
backtime=`date +%Y%m%d%H%M%S`
dirName=${dbhost}${backtime}
echo "--${backtime},${dbhost}備份數據庫開始--" >> ${logpath}/xtrabackuplog.log
echo "--${backtime},${dbhost}備份數據庫開始--" >> ${xtrabackuplogpath}
#遠程創建文件夾
ssh ${remoteUser}@${remoteIp} "mkdir ${remoteDir}/${dirName}"
#遠程備份
xtrabackup --host=${dbhost} --user=${dbuser} --password=${dbpasswd} --backup --no-timestamp --ftwrl-wait-timeout=10 --tmpdir=${tmpdir}  --compress  --compress-threads=8 --stream=xbstream --parallel=8  | ssh ${remoteUser}@${remoteIp} "xbstream -x -C ${remoteDir}/${dirName}"
endtime=`date +%Y%m%d%H%M%S`
lastStr=$(tail -n -1 ${xtrabackuplogpath})
successStr='completed OK'
result=$(echo $lastStr | grep "${successStr}")
if [[ "$result" != "" ]]
then
  echo "--${endtime},${dbhost}數據庫備份完成--" >> ${logpath}/xtrabackuplog.log
else
  echo "--${endtime},${dbhost}數據庫備份失敗!!--" >> ${logpath}/xtrabackuplog.log
fi
echo "--${endtime},${dbhost}備份數據庫結束--" >> ${logpath}/xtrabackuplog.log
關於xtrabackup參數這裏就不在過多講解,其他就是一些備份賬戶 dbuser dbpasswd dbhost 遠程目標機器賬戶remoteUser remoteIp以及存放數據的文件路徑remoteDir,一定要注意遠程目標機器上必須存在remoteDir,不然會找不到遠程機器上的路徑。

NO.5 開始備份

sh /home/shellscript/xtrabackup_back.sh >> /home/xtrabackup/xtrabackuplog1.log 2>&1

這裏 >>後的路徑就是備份腳本中xtrabackuplogpath變量的值。

NO.6 恢復備份

#decompress
xtrabackup  --parallel=8  --decompress --remove-original --target-dir=/data/mysqlback/20190701155002
#/data/mysqlback/20190701155002即備份文件所在的路徑
#prepare:
xtrabackup --prepare --target-dir=/data/mysqlback/20190701155002

#backup 原有mysql文件 以備失敗恢復:
mv mysql mysql_bak

#copy-back:
xtrabackup --copy-back --parallel=8 --target-dir=/data/mysqlback/20190701155002
#給最新的mysql數據目錄授權 不然可能存在啓動mysql失敗 提示操作文獻權限不足
chown -R mysql:mysql /home/mysqldata/mysql/
# start
service mysqld start

NO.7 搭建主從關係

1)查看已經執行過的GTID(在mysql datadir同目錄下)

[root@localhost mysql]# cat xtrabackup_info |grep binlog_pos
binlog_pos = filename 'mysql-bin.000012', position '19559', GTID of the last change 'f2d0efd6-6ab7-11e8-8fdd-fa163eda7360:1-41'

2)連接mysql執行

mysql>SET @MYSQLDUMP_TEMP_LOG_BIN=@@SESSION.SQL_LOG_BIN;
mysql> SET @@SESSION.SQL_LOG_BIN= 0;
mysql> SET @@GLOBAL.GTID_PURGED='f2d0efd6-6ab7-11e8-8fdd-fa163eda7360:1-41';
#這裏的f2d0efd6-6ab7-11e8-8fdd-fa163eda7360:1-41就是從xtrabackup_info中查詢到的已執行過的GTID值。
mysql> SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
mysql>change master to master_host='192.168.1.2', master_port=3306, master_user='repl_user', master_password='123456', master_auto_position=1;
mysql> start status; #啓動slave
mysql> show slave status\G; #查看從庫狀態
#確認IO Thread yes以及SQL Thread yes 即搭建成

至此就完成了在線熱備以及整個備份恢復和搭建GTID主從關係。

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