一般检查状态,只是show slave status\G;查看是否两个Yes,但是,这样其实也不完全正确,我加上了对比了两个表的数据,如果都满足才正常,其中有一项不满足,则发邮件通知.
################
本脚本有很多个小脚本组成,下面依次介绍
一共有以下几个脚本
all.sh for-master.sh for-slave.sh master.sh slave.sh
##########################################
1.:导出库内的所有的表格名字,并且记录到一个文件下,注意:我们要对比的是两台server之间的数据,所有,要编写两个同样功能的脚本.
####
vim master.sh
#!/bin/bash
usr="xxx"
passwd="xxx"
ip="xxx"
mysql -u $usr -p$passwd -h$ip << EOF
use xxx(库名);
show tables;
EOF
###############
2.同样的,编写导出另外一个server的表
vim slave.sh
#!/bin/bash
usr="xxx"
passwd="xxx"
ip="xxx"
mysql -u $usr -p$passwd -h$ip << EOF
use xxx(库名);
show tables;
#############
3.对导出来的表分别取值:也就是统计每个表内有多少数据
vim for-master.sh
#!/bin/bash
#######master和slave对比
master=$(cat master.txt)
for i in $master
do
mysql -u root -pxxx(pwd) -h xxx(IP) << EOF
use xx(db);
SELECT count(*) FROM $i;
EOF
done
#################
vim for-slave.sh
#!/bin/bash
slave=$(cat slave.txt)
for i in $slave
do
mysql -u root -pxxxEOF
use xxx
SELECT count(*) FROM $i;
EOF
done
###################
4.把上面的所有的脚本都连接起来,上面脚本都还没执行呢,这个脚本才是真正的执行脚本
vim all.sh
#!/bin/bash
#############
chmod +x master.sh
chmod +x slave.sh
chmod +x for-slave.sh
chmod +x for-master.sh
./master.sh | grep -v Tables_in_fdw > master.txt
./slave.sh | grep -v Tables_in_fdw > slave.txt
./for-master.sh > a.txt
./for-slave.sh > b.txt
Mnum=`cat a.txt | wc -l`
for((i=1;i<=$Mnum;i++))
do
file1="$(cat a.txt)"
file2="$(cat b.txt)"
if [ "$file1" == "$file2" ]
then
echo "mysql master-slave is ok..." > /dev/null
else
echo "mysql database table does not have sync, please check ...." > error.txt
mail -s "mysql master/slave" xxx@xxx.com > error.txt
fi
done
#################对slave主机的show slave status\G的状态进行监控
#mysql -u root -pxxx << EOF
# show slave status\G
#EOF
mysql -u root -px -D xxx -e "show slave status\G;" > status.txt
IO=$(cat status.txt | grep Slave_IO_Running | awk '{print $2}')
SQL=$(cat status.txt | grep Slave_SQL_Running | awk '{print $2}')
if [ "$IO" = "Yes" ] && [ "$SQL" = "Yes" ]
then
echo "..............." &> /dev/null
else
echo "down ............"
echo "mysql database has an error state, not the display YES" > error.txt
mail -s "mysql master/slave" xxxx@xxx.com < error.txt
fi
以上的脚本你明白流程了吗:
1.导出两个服务器想对应的库内的所有的表,并分别存于两个不同的文件下
2.上一步所导出的表为基础,再把表进行统计,统计数每个表的数据有多少,并且分别保存
3.执行上面两个脚本,并进行对比。。。。
###################
这个脚本有一点不足,我也正在想办法改进,就是两个库内某个表的数据不一致的话,会不停的发邮件,对比那里应该要用别的方法吧,如有好的办法,欢迎指教...