华为云RDS恢复到本地脚本
前置工作:完成qpress的安装
#wget不能直接完成下载提示406错误的话,直接windows连接到http://www.quicklz.com去执行下载后上传到linux服务器
cd ~
wget http://www.quicklz.com/qpress-11-linux-x64.tar
tar -xf qpress-11-linux-x64.tar
mv qpress /usr/bin/
#创建一个恢复用的目录,线上的qp文件和下面的脚本文件都放到该目录下
mkdir -p /home/run
cd /home/run
备注
1.华为云拥有super权限的账户不是root@localhost,而是rdsAdmin@localhost
2.华为的binlog备份非常反人类,每5分钟就生成一个,而且根据他们客服的说法,这个参数还没法改(我就想问阿里每6小时生成1个是怎么做到的,没法改?EXO?),如果把库恢复到某个时间点(恢复到线下的那种),最糟糕的情况下,你需要下载12*24=288个binlog文件,简直是灾难
脚本如下
#!/bin/bash
# 2019.8.5
# FlyDido
# 物理恢复华为RDS的全量备份
pid=`ps -ef|grep '/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf'|grep -v grep|awk '{print $2}'`
if [ -z "$pid" ]; then
echo "mysql is down" > /tmp/dump.log
else
kill -9 $pid
fi
rm -rf /data/mysql/mysql3306/data/*
rm -rf /data/mysql/mysql3306/logs/*
cd /home/run
#解压
xbstream -x < *.qp -C /data/mysql/mysql3306/data/
innobackupex --decompress /data/mysql/mysql3306/data/
find /data/mysql/mysql3306/data/ -name "*.qp" | xargs rm -f
#应用日志
innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --apply-log /data/mysql/mysql3306/data
chown -R mysql.mysql /data/mysql
sed -i 's/#skip-grant-tables=1/skip-grant-tables=1/g' /data/mysql/mysql3306/my3306.cnf
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &
#判定mysql启动情况
while((1<100))
do
tail -10 /data/mysql/mysql3306/data/error.log |grep 'ready for connections' &>> /tmp/dump.log
if [ $? == 0 ];then
echo -e "mysql启动完成\n"
break
else
echo -e "mysql启动中...\n"
sleep 10
fi
done
#mysql_upgrade -uroot &>> /tmp/dump.log &&
mysql -urdsAdmin << EOF
update mysql.user set authentication_string=password('huaweiRDS') where user='rdsAdmin';
grant all privileges on *.* to root@'%' with grant option;
flush privileges;
shutdown;
EOF
sed -i 's/skip-grant-tables=1/#skip-grant-tables=1/g' /data/mysql/mysql3306/my3306.cnf
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &
echo -e "恢复完成,密码为huaweiRDS"
#沿用阿里的回复点和binlog位置查询方法
A=`cat /data/mysql/mysql3306/data/xtrabackup_binlog_info|sed -n 1p|awk '{print $1}'`
B=`cat /data/mysql/mysql3306/data/xtrabackup_binlog_info|sed -n 1p|awk '{print $2}'`
echo -e "初始binlog为:$A"
echo -e "初始恢复点为:$B"
#删除qp文件
sleep 10
rm -rf *.qp