xtrack mysql_xtrackback还原数据库脚本

#! /bin/bash

mysqlprod=139

newmysqlprod=16140

#mkdir -p /dbs/$mysqlprod/

mkdir -p /mysql/mysql_sysn_${mysqlprod}_01/conf/ /mysql/mysql_sysn_${mysqlprod}_01/binlog/ && chmod -R 777 /mysql/mysql_sysn_${mysqlprod}_01/binlog/

sed "s/${mysqlprod}/${mysqlprod}_01/g"  /mysql/mysql_sysn_${mysqlprod}/mysql/conf/my.cnf > /mysql/mysql_sysn_${mysqlprod}_01/conf/my.cnf

sed "s/${mysqlprod}/${mysqlprod}_01/g"  /mysql/mysql_sysn_${mysqlprod}/mysql/conf/mysqld.cnf > /mysql/mysql_sysn_${mysqlprod}_01/conf/mysqld.cnf

build_mysql(){

docker run --restart=always --name mysql_${mysqlprod}_01 -p ${newmysqlprod}:3306 -v  /mysql/mysql_sysn_${mysqlprod}_01/conf:/etc/mysql/conf.d  -v /mysql/mysql_sysn_${mysqlprod}_01/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /dbs/${mysqlprod}/full/mysql/:/mysql/mysql_sysn_${mysqlprod}_01/mysql/data -v /mysql/mysql_sysn_${mysqlprod}_01/binlog/:/binlog/ -e MYSQL_ROOT_PASSWORD=xxxx -d mysql:5.7

#打印容器日志

dockerId=`docker ps -a -q|grep mysql_${mysqlprod}_01`

echo "数据库容器id为:$dockerId ....."

}

xbtream="/usr/bin/xbstream"

innobackupex="/usr/bin/innobackupex"

#备份目录

dbbackdir="/dbs/${mysqlprod}"

#全量目录

fulldir="/dbs/${mysqlprod}/full/mysql"

dbconfig="/mysql/mysql_sysn_${mysqlprod}/mysql/conf/mysqld.cnf"

myconfig="/mysql/mysql_sysn_${mysqlprod}/mysql/conf/my.cnf"

depress(){

#拷贝备份文件到还原目录

echo "拷贝备份文件到备份目录中..."`date -R`...

cp /dbs/backup/mysql/$mysqlprod /dbs -rp

echo "完成拷贝备份文件"`date -R`...

echo "/dbs/back/mysql/$mysqlprod"

#获取备份文件并解压

echo "开始解压备份文件...."

for file in `find  $dbbackdir  -type f -regex  ".*\(.xbstream\)"`; do

##获取增量备份文件全路径

filedir=`dirname $file`

##解压全增量备份文件

#echo $filedir

#pwd filedir

cd $filedir

dir=`pwd`

mkdir mysql

filename=`ls *.xbstream`

$xbtream -x -C $dir/mysql

#解压

innobackupex --decompress --parallel=6 --compress-threads=6 $dir/mysql

#删除压缩文件

find  $dir/mysql  -type f -regex  ".*\(.qp\)" -exec rm -rf {} \;

done

#恢复全量

$innobackupex --defaults-file=$dbconfig --use-memory=256M --apply-log $fulldir --redo-only

#恢复增量

for file in `find $dbbackdir  -type f -regex  ".*\(incremental.xbstream\)"|xargs ls -ltr|tr -s " "|cut -d" " -f 9`; do

#  echo "$file"

#增量目录

incrementaldir=`dirname $file`

echo $incrementaldir

$innobackupex --defaults-file=$dbconfig --use-memory=256M --apply-log $fulldir --incremental-dir=$incrementaldir  --redo-only

$innobackupex --defaults-file=$dbconfig --use-memory=256M --apply-log $fulldir

done

chown -R -f mysql:mysql $fulldir

#需要修改docker mysql配置文件指向新的mysql数据目录,然后重启mysql

#sed -i '3,3c\datadir= $fulldir'

#docker restart mysql_${mysqlprod}_01

sed -i '3,3c\datadir = $fulldir' $dbconfig

#docker restart mysql_${mysqlprod}_01

}

#sed -i '3,3c\datadir = $fulldir' $dbconfig

#docker restart mysql_${mysqlprod}_01

#binlog恢复

#查看最后同步的binlog文件和位点

#tart_binlog=`cat $fulldir/xtrabackup_binlog_pos_innodb |awk '{print $1}'`

#sart_position=`cat $fulldir/xtrabackup_binlog_pos_innodb |awk '{print $2}'`

#原库binlog位置

binlogdir=/mysql/mysql_sysn_${mysqlprod}/mysql/binlog

binlogcount=`ls $binlogdir|grep mysql-bin.00*|wc -l`

mysql="/usr/bin/mysql"

mysql_host="127.0.0.1"

mysql_user="root"

mysql_pwd="LzslovZJHEN6x123RU"

mysql_port=${newmysqlprod}

mysqlbinlog=/usr/bin/mysqlbinlog

reback_binlog(){

echo "开始恢复binlog,请耐心等待。。。"

start_binlog=`cat $fulldir/xtrabackup_binlog_info |awk '{print $1}'`

ls $fulldir/xtrabackup_binlog_info

start_position=`cat $fulldir/xtrabackup_binlog_info |awk '{print $2}'`

#直接获取原库日志来恢复binlog数据

for log in `ls $binlogdir |grep "mysql-bin.00*"|grep -A 10 "$start_binlog"`;do

echo $log

cd $binlogdir

pwd

if [ $log = $start_binlog ]; then

#echo "mysql -u$mysql_user -p$mysql_pwd -h$mysql_host -P$mysql_port"

mysqlbinlog $log --start-position=$start_position|mysql -u$mysql_user -p$mysql_pwd -h$mysql_host -P$mysql_port

else

#echo 2

#mysqlbinlog $log |mysql -uroot -pLzslovZJHEN6x123RU -h127.0.0.1 -P16140

mysqlbinlog $log|mysql -u$mysql_user -p$mysql_pwd -h$mysql_host -P$mysql_port

fi

done

}

case $1 in

depress)

starttime=`date -R`

echo "解压还原..."

depress

build_mysql

endtime=`date -R`

echo "解压完成,耗时start->end: $starttime -> $endtime"

;;

binlog)

starttime=`date -R`

echo "恢复binlog"

reback_binlog

endtime=`date -R`

echo "追加binlog完成,耗时start->end: $starttime -> $endtime"

;;

*)

echo "depress|binlog"

;;

esac

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值