操作场景
说明:
为节约存储空间,云数据库 MySQL 的物理备份和逻辑备份文件,都会先经过 qpress 压缩,后经过 xbstream 打包(xbstream 为 Percona 的一种打包/解包工具)进行压缩与打包。开源软件 Percona Xtrabackup 可以用于对数据库进行备份恢复,本文为您介绍使用 XtraBackup 工具,将 MySQL 物理备份文件恢复至其他主机上的自建数据库。
1.下载备份文件
步骤 1. 登录管理控制台。
步骤 2 . 单击管理控制台左上角的资源池,选择区域和项目。
步骤 3. 选择“数据库 > 关系型数据库”。进入关系型数据库信息页面。
步骤 4. 在“备份管理”页面,选择需要下载的可用备份,单击操作列中的“下载”。
您也可进入目标实例的“基本信息”页面,在左侧导航栏选择“备份恢复”,在“全量备份”子页签下,单击操作列中的“下载”。
步骤 5 . 在弹出框中选择复制链接下载。
2.在shell里面执行 vim recover.sh,然后将下面脚本内容复制进去。(该脚本用户只需修改workDir变量,此变量为数据库的安装目录,可自定义设置)
#!/bin/bash
#------------------------------------------------
#Filename: recover.sh
#Revision: 1.0
#Date: 2022/11/05
#Description:This is the data recovery script
#-------------------------------------------------
############################安装部署MySQL5.7.31####################################
#传参下载地址
if [[ "$1" == "" ]];then
echo "注意!请使用source执行脚本,在脚本后面传入'下载地址';列如:source recover.sh 'Download.URL'";
else
url="https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz"
#数据库目录
workDir="/app"
mkdir ${workDir}/data -p
cd ${workDir};
wget_Status=`rpm -qa |grep -i "wget"|wc -l`;
if [[ ${wget_Status} == 0 ]]; then
#下载wget命令
yum install -y wget
fi
if [[ $? != 0 ]]; then
echo "wget下载失败,请确认网络或者yum源无问题后重新执行次脚本" && exit -1;
fi
#下载云上备份
mkdir ${workDir}/data1 -p
wget -c $1 -O ${workDir}/data1/test.xb
#下载mysql
sql=${url##*/}
wget ${url} -O ${workDir}/${url##*/}
tar xf ${workDir}/${url##*/} -C ${workDir}/;
mv ${workDir}/${sql%.tar.gz} ${workDir}/mysql;
rm -rf ${workDir}/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
#初始化环境
Mdb_Status=`rpm -qa |grep -i "mariadb"|wc -l`;
if [[ ${Mdb_Status} != 0 ]]; then
yum remove mariadb -y
fi
Path="export PATH=${workDir}/mysql/bin:${workDir}/xbk/bin";
cat /etc/profile |grep ${Path} 2>/dev/null
if [[ $? != 0 ]]; then
echo -n ${Path} >>/etc/profile
echo ':$PATH' >>/etc/profile
source /etc/profile
fi
#创建虚拟用户给目录授权
user_status=`cat /etc/passwd |awk -F ':' '{print $1}'|grep mysql|wc -l`;
if [[ ${user_status} -eq 0 ]]; then
useradd -s /bin/nologoin mysql
fi
chown -R mysql.mysql ${workDir};
#初始化数据库
lib_Status=`rpm -qa |grep -i "libaio-devel"|wc -l`;
if [[ ${lib_Status} == 0 ]]; then
yum install -y libaio-devel
fi
mysqld --initialize-insecure --user=mysql --basedir=${workDir}/mysql --datadir=${workDir}/data
#设置/etc/my.cnf
cat >/etc/my.cnf<<EOF
[mysqld]
user=mysql
basedir=${workDir}/mysql
datadir=${workDir}/data
socket=/tmp/mysql.sock
server_id=666
port=3306
[mysql]
socket=/tmp/mysql.sock
EOF
#配置systemd启动方式
cat >/etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=${workDir}/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
clear
mysqld_Status=`ps aux |grep "${workDir}/mysql/bin/mysqld --defaults-file=/etc/my.cnf"|wc -l`;
if [[ ${mysqld_Status} == 2 ]]; then
echo '数据库安装并启动完成!准备数据恢复......';
else
echo "未安装成功";
fi
######################恢复数据#####################################
sleep 10
systemctl stop mysqld
#创建云上备份下载目录
wget -c 'https://docs-tencentdb-1256569818.cos.ap-guangzhou.myqcloud.com/qpress-11-linux-x64.tar'
tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
rm -rf qpress-11-linux-x64.tar
wget 'https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/tarball/percona-xtrabackup-2.4.23-Linux-x86_64.glibc2.12.tar.gz'
tar -xf percona-xtrabackup-2.4.23-Linux-x86_64.glibc2.12.tar.gz
mv percona-xtrabackup-2.4.23-Linux-x86_64.glibc2.12 ${workDir}/xbk
cd ${workDir}/data1/
source /etc/profile
#数据解压
xbstream -x ${workDir}/data1/ < ${workDir}/data1/test.xb
xtrabackup --remove-original --decompress --target-dir=${workDir}/data1/
chown -R mysql:mysql ${workDir}
#启动mysqld进程
mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=${workDir}/data1 &> /dev/null
clear
mysql -S /tmp/mysql.sock -e "SELECT 1" > /dev/null 2>&1
# 根据连接结果判断
if [ $? -eq 0 ]; then
echo "数据库恢复失败"
else
echo "数据恢复成功,请使用云数据库账号密码登录验证"
fi
fi
3.代码粘贴到文件后保存,并添加X执行权限
chmod +x recover.sh
4.执行脚本,注意使用source执行,脚本里面有配置环境变量,必须使用当前shell执行改脚本
source recover.sh 'Download.URL'
5.使用云数据库的账号密码登录验证
--mysql -uroot -p;连接数据库
--show databases;查看当前所有的数据库