检查名为iotplat的Mysql数据库。

现行k8s中的mysql状况检查;

status-mysql-iotplat.sh

#!/bin/bash


rundir=$(cd $(dirname $0); pwd)
theday=`date +%F`

if [ ! -d "${rundir}/log" ]; then
        mkdir ${rundir}/log
fi


if [ "$*" ];then
        arg=$*
else
        arg="mysql-0"
fi


echo -e "当前 iotplat-mysql-0 数据库中s1box-user库中user表的行数:" > ${rundir}/log/iotplat-mysql-status-${theday}.txt

#连接k8s中指定数据库(s1box-user),查询里边表(user)的行数,并输出结果
kubectl exec -it -n iotplat iotplat-mysql-0 mysql -- -uroot -p数据库密码 -D s1box-user \
-e 'select count(*) from user' >> ${rundir}/log/iotplat-mysql-status-${theday}.txt 2>&1

#-e 'SELECT TABLE_ROWS from information_schema.TABLES WHERE TABLE_SCHEMA="s1box-user" AND TABLE_NAME="user"' \
#>> ${rundir}/log/iotplat-mysql-status-${theday}.txt 2>&1

#删除掉警告提示这些行
#sed -n '$p' ${rundir}/log/redis-status-${theday}.txt
sed -i '/Warning/d' ${rundir}/log/iotplat-mysql-status-${theday}.txt
sed -i '/Defaulting/d' ${rundir}/log/iotplat-mysql-status-${theday}.txt
sed -i '/Use/d' ${rundir}/log/iotplat-mysql-status-${theday}.txt

cat ${rundir}/log/iotplat-mysql-status-${theday}.txt

运行

检查验证备份的数据;

使用xtrabackup备份的备份数据,压缩后名为*mysql-iotpla*.tar.gz这样格式,保存在当前的bak目录下。

解压后的数据在当前dbbak/mysql/目录下,名为mysqlbak.xtrabackup。

成功还原后的数据在当前dbbak/mysql/目录下。

mysql-check-iotplat.sh

#!/bin/bash


#运行目录
rundir=$(cd $(dirname $0); pwd)
#格式化当前日期
theday=`date +%F`

echo -e "=======${theday} iotplat-Mysql备份验证======="

#是否带参数,参数是备份目录,
#如果不带,则在运行目录查找包含“mysql*.tar.gz”的文件中最新的一个
if [ "$1" ];then
	mysqlbaktar=$1
else
	mysqlbaktar=$(find ${rundir} -name "*mysql-iotplat*.tar.gz" | sort -rn | head -1)
fi
if [ ! -e "${mysqlbaktar}" ];then
	echo "没有找到备份压缩包!!!"
	exit 0
fi
echo -e "1.Mysql备份文件是:\n ${mysqlbaktar}"

#在宿主机中创建一个临时的数据库目录
dbtmpdir="${rundir}/dbtmp/mysql"
if [ -d ${dbtmpdir} ];then
	rm -rf ${dbtmpdir}/*
else
	mkdir ${dbtmpdir} -p
fi
echo -e "2.数据库目录:\n ${dbtmpdir}"


echo -e "3.解压备份数据库文件"
tar zxf ${mysqlbaktar} -C ${dbtmpdir}
xtrafile=$(find ${dbtmpdir} -name "*iotplat*.xtrabackup" | sort -rn | head -1)
mv ${xtrafile} ${dbtmpdir}/mysqlbak.xtrabackup
echo -e " 备份文件:${dbtmpdir}/mysqlbak.xtrabackup"

#启动一个容器(xtrabackup)还原数据,完成后关闭此容器
echo -e "4.还原数据库"
docker run -it --rm -v ${dbtmpdir}:/home docker.sunniwell.net/base/xtrabackup:2.4.14 /bin/bash -c 'xbstream -x < /home/mysqlbak.xtrabackup -C /home && xtrabackup --prepare --target-dir=/home'  >> /dev/null 2>&1
echo -e " 还原的数据库目录:${dbtmpdir}"

#再次启动一个mysql容器,做为mysql服务器,使用数据库目录为之前还原好的。
echo -e "5.查询s1box-user库中user表,验证数据"
docker run --name mysql-check -v ${dbtmpdir}:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="数据库密码" -d mysql:5.7.19 >> /dev/null 2>&1
#echo -e "======================================" >> ${rundir}/log/mysql-check.txt
echo -e "=======${theday} iotplat-Mysql备份验证=======" >> ${rundir}/log/mysql-check.txt
#echo -e "======================================" >> ${rundir}/log/mysql-check.txt
echo -e "备份文件为:${mysqlbaktar}" >> ${rundir}/log/mysql-check.txt
echo -e "验证结果:" >> ${rundir}/log/mysql-check.txt
#第三次启动一个mysql容器,连接之前第二次启动的mysql容器
#在容器里用mysql命令连接第二次启动好的mysql服务器容器,并查询ucs数据库user表的行数变化。
#运行完成后关闭
docker run -it --link mysql-check:mysql --rm mysql:5.7.19 sh -c  \
'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -D s1box-user  \
 -e "select count(*) from user"' > ${rundir}/log/mysql-check-${theday}.txt
#停止第二次启动的mysql服务器容器,并删除。
docker stop mysql-check >> /dev/null 2>&1
docker rm mysql-check >> /dev/null 2>&1

cat ${rundir}/log/mysql-check-${theday}.txt | tr -d "\r" > ${rundir}/log/mysql-check-tmp.txt
sed -e '/Warning/d' ${rundir}/log/mysql-check-tmp.txt >> ${rundir}/log/mysql-check.txt
tail -n 8 ${rundir}/log/mysql-check.txt
echo -e "验证结果输出:${rundir}/log/mysql-check.txt"

运行

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐