Jenkins系列:jenkins完成数据库还原 (mysql &sqlserver)

背景:

        在做自动化测试过程中,会涉及到环境数据库快照的备份和还原。sqlServer还比较简单,执行下快照备份还原即可。mysql稍微麻烦点,因为自身自带的备份和还原都太慢了效率过低,这里需要用到外挂mydumper和myloader进行多线程的备份还原,提高效率。

一、SQlServer

        sqlServer比较简单,方式也比较多,如果jenkins对应的运行节点是windows,直接在windows中存放快照备份还原的sql脚本文件,然后再jenkins中执行bat命令即可。如果运行节点是Linux, 也可以运行sql文件,还可以通过docker容器运行。

Windows:


set osql="C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\OSQL.exe"

echo "=========清理日志文件==========="
cd /d D:\sql
%osql% -S 10.5.11.110\sql2016 -U sa -P Mysoft95938 -d AutoTest_RegressionTest -i .\restore.sql

Linux:

touch  还原数据库脚本.sh
cat>>还原数据库脚本.sh<<EOF
sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql-tools -h sql-tools -d mcr.microsoft.com/mssql/server:2019-latest 
sudo docker exec -i sql-tools /opt/mssql-tools/bin/sqlcmd  -S 10.5.11.110  -U sa -P "Mysoft95938" \
-Q "USE master 
 GO
 ALTER DATABASE [AutoTest_OP_FW0506] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
RESTORE DATABASE [AutoTest_OP_FW0506] FROM DATABASE_SNAPSHOT = 'AutoTest_OP_FW0506_snapshot' ;
GO
ALTER DATABASE [AutoTest_OP_FW0506] SET MULTI_USER WITH ROLLBACK IMMEDIATE;"
sudo docker stop sql-tools
sudo docker rm /sql-tools   
EOF
echo ---------脚本赋权----------
chmod 777 还原数据库脚本.sh
echo ---------执行脚本----------
sh 还原数据库脚本.sh
rm 还原数据库脚本.sh

二、Mysql

        2.1 mysql使用mydumper进行备份:

cd ~/data/dbBak
rm -r -f testCreateBak.log
#rm -rf ${bakFileName}
touch testCreateBak.log
mydumper -h ${host} -P ${port} -u ${userName} -p ${password} --database ${dbName} -o ~/data/dbBak/${bakFileName} -c -e -G -E -R -t 100 --long-query-guard 7200 --complete-insert -v 3  --logfile testCreateBak.log &

# 读取日志文件最后一行,判备份是否结束
completeMark='Finished dump'
flag=false

# 指定时间内循环操作,直到最后一行标志为备份结束
time0=$(date "+%s")
echo $time0
 
while((($(date "+%s")-time0)<=300))
do
	lastLine=$(tail testCreateBak.log)
	if [[ $lastLine =~ $completeMark ]]
	then
		echo "备份结束!"
        flag=true
        break
    elif [[ $lastLine =~ 'ERROR' ]]
	then
		echo "备份失败!"
        exit 1
        break
	else
		echo "备份进行中!"
        sleep 5
	fi
done
if [ $flag == 'false' ]
then
	exit 1
fi

        2.2 使用myloader进行数据库还原:

cd ~/data/dbBak
rm -r -f testRecoverDB.log
touch testRecoverDB.log
myloader -h ${host} -P ${port} -u ${userName} -p ${password} --database ${dbName} -d ~/data/dbBak/${bakFileName} -o -t 100 -v 3 --logfile testRecoverDB.log &
# 读取日志文件最后一行,判断还原是否结束
completeMark='Starting table checksum verificatio'

# 指定时间内循环操作,直到最后一行标志为还原结束
time0=$(date "+%s")
echo $time0
 
while((($(date "+%s")-time0)<=600))
do
	lastLine=$(tail testRecoverDB.log)
	if [[ $lastLine =~ $completeMark ]]
	then
		echo "还原结束!"
        break
    elif [[ $lastLine =~ 'ERROR' ]]
	then
		echo "还原失败!"
        exit 1
	else
		echo "还原进行中!"
        sleep 5
	fi
done

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值