Mysql主从搭建成功后,需要监视从库的状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: XXXXXXX
Master_User: reptor
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000093
Read_Master_Log_Pos: 205773579
Relay_Log_File: Report-relay-bin.000075
Relay_Log_Pos: 205773742
Relay_Master_Log_File: mysql-bin.000093
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
比较简单的方法是,监视Slave_IO_Running 和 Slave_SQL_Running是否为yes。
网上找了一个脚本
#!/bin/sh
ip=`ifconfig eth1|sed -n 2p|awk '{ print $2 }'|awk -F : '{ print $2 }'`
port='3306'
array=($(mysql -uroot -pXXXX -e "show slave status\G"|grep "Running" |awk '{print $2}'))
if [ "$port" == "3306" ]
then
if [ "${array[0]}" == "Yes" ] || [ "${array[1]}" == "Yes" ]
then
echo "slave is OK"
else
echo "slave: ${ip} replication error" | mail -s 'slave replication is error' XXX@qq.com YYYY@qq.com
fi
else
echo "slave: ${ip} mysql is stop" | mail -s 'slave mysql is stop' XXX@qq.com YYYY@qq.com
然后设置定时任务,比如每个小时执行一次
* */1 * * * sh /mnt/erp/batch/checkSlave.sh
设定为crontab任务后,执行shell时,用户的环境变量会丢失。
所以在#!/bin/sh下面添加
. /etc/profile
. ~/.bash_profile
以启用用户的环境变量
执行之后可能会发不出mail,还需要进一步安装配置mail服务。
我用的是centOS,直接安装sendmail
yum install sendmail
安装好sendmail以后执行以下命令启动sendmail
service sendmail start
安装成功后测试一下就OK了
echo "This is test mail" | mail -s 'Test mail' XXX@qq.com
这样一个简单的主从状态监视就搭建完毕了。
但即使不报错,比不能保证主从同步的正确性。
因为,即使主从的数据不一致,只要不发生类似于主键冲突的error,状态依然显示为两个yes。
要想完全确认主从一致性,需要另一个工具
pt-table-checksum
后面有空了我会部署它。