MySQL在线通过xtrabackup流式热备份,恢复,并开启重库复制的脚本

数据无价,谨慎操作,风险自担。

在MySQL日常管理中,需要快速的创建数据库副本进行DBA的工作。因此阅读xtrabackup等参考手册,编写以下脚本,提升了生产力。引以为抛转,如有更好,可分享。

脚本正文:

#!/bin/bash
#xtrabackup流式热备份,恢复,并开启重库复制
#注意此脚本请在空白数据库服务器上执行
#软件平台:centos7.6 mysql5.7.25
#应用工具:xtrabackup2.4.12
#预配置SSH免密码登陆并确认通过
#version 1.0
#by jyx 2019-09-05

#远程IP及账户等基础信息
REMOTE_HOST="xxx"
REMOTE_HOST_SSH_PORT="xxx"
REMOTE_HOST_USERNAME="xxx"
REMOTE_DB_USERNAME="xxx"
REMOTE_DB_PASSWORD="xxx"
REMOTE_DB_PORT="xxx"

#本地IP及账户等基础信息
LOCAL_HOST="xxx"
LOCAL_HOST_SSH_PORT="xxx"
LOCAL_HOST_USERNAME="xxx"
LOCAL_DB_USERNAME="xxx"
LOCAL_DB_PASSWORD="xxx"
LOCAL_DB_PORT="xxx"
                                                 
#本地DB默认路径
MYSQL_PATH="/var/lib/mysql"
#或指定DB路径
#MYSQL_PATH="/mnt/mysql"

#本地xtrabackup流式备份数据库暂存路径
BACKUP_PATH="/home/xtrabak"

###在远程服务器流式备份表空间,传送本地服务器
#SSH远程服务器
ssh -p${REMOTE_HOST_SSH_PORT} ${REMOTE_HOST} &> /dev/null << eof
#在远程服务器用xtrabackup流式备份,传送本地服务器
innobackupex --user=${REMOTE_DB_USERNAME} --password='${REMOTE_DB_PASSWORD}'  --stream=xbstream ./ | ssh -p${LOCAL_HOST_SSH_PORT} ${LOCAL_HOST} "xbstream -x -C ${BACKUP_PATH}"
exit
eof

###在本地服务器准备流式备份文件等
innobackupex --apply-log  ${BACKUP_PATH}
chown -R mysql:mysql ${BACKUP_PATH}

###在本地服务器停止MySQL服务
systemctl stop mysqld
###在本地服务器清空MySQL目录
rm -rf ${MYSQL_PATH}/*

###在本地服务器移动备份到mysql的schema目录
mv ${BACKUP_PATH}/${DB_NAME} ${MYSQL_PATH}

###在本地检查并分析导入的数据库
mysql_upgrade -u${LOCAL_DB_USERNAME} -p${LOCAL_DB_PASSWORD} --force
mysqlcheck -u${LOCAL_DB_USERNAME} -p${LOCAL_DB_PASSWORD}  -a --auto-repair

###在本地重启数据库
systemctl restart mysqld

###配置从库连接信息等,然后自动加入从库复制
#GTID编号变量
GTID_SN=$(awk '{print $3}' ${BACKUP_PATH}/xtrabackup_binlog_info)
#BINLOG_FILE_NAME文件名变量
BINLOG_FILE_NAME=$(awk '{print $1}' ${BACKUP_PATH}/xtrabackup_binlog_info)
#POS_SN编号变量
POS_SN=$(awk '{print $2}' ${BACKUP_PATH}/xtrabackup_binlog_info)

#在本地登陆数据库
mysql -u${LOCAL_DB_USERNAME} -p${LOCAL_DB_PASSWORD} -e "
#重设所有从库信息
stop slave;
reset master;
reset slave all;
#设置GTID全局变量
set global gtid_purged = '${GTID_SN}';

#授权到主库的复制链接,引用相应参数变量
CHANGE MASTER TO MASTER_HOST='${REMOTE_HOST}',MASTER_PORT=${REMOTE_DB_PORT},MASTER_USER='${REMOTE_DB_USERNAME},MASTER_PASSWORD='${REMOTE_DB_PASSWORD}',master_log_file='${BINLOG_FILE_NAME}',master_log_pos=${POS_SN} FOR CHANNEL 'master:${REMOTE_HOST}';

#启动从库复制
start slave;
#退出数据库登陆
exit "
#清除备份目录以节省空间
#rm -rf ${BACKUP_PATH}

###检查MySQL日志,查看重库复制等

脚本结束

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值