mysql主从监控脚本含自动配置发Gmail邮件客户端

常用脚本备份

  
  
  
  
  1. 自动配置msmtp,使用mail发邮件 
  2. #!/bin/bash 
  3. SRC=/usr/local/src 
  4. cd $SRC 
  5. #install msmtp client 
  6. # if your want support TLS/SSL,install openssl-devel 
  7. # yum install -y openssl-devel  // 
  8. wget http://nchc.dl.sourceforge.net/project/msmtp/msmtp/1.4.28/msmtp-1.4.28.tar.bz2 
  9. tar xjf msmtp-1.4.28.tar.bz2 
  10. cd msmtp-1.4.28 
  11. ./configure --prefix=/usr/local/msmtp && make && make install  
  12. cd /usr/local/msmtp/ 
  13. mkdir etc 
  14. echo 'account gmail 
  15. host smtp.gmail.com 
  16. from [email protected] 
  17. auth on 
  18. tls on 
  19. tls_starttls on 
  20. tls_force_sslv3 on 
  21. tls_trust_file /usr/local/msmtp/etc/gmail.crt 
  22. user [email protected] 
  23. password 1234567890
  24. port 587 
  25. syslog off 
  26. logfile /tmp/msmtp.log 
  27. account default: gmail'  >  /usr/local/msmtp/etc/msmtprc 
  28. wget -O /usr/local/msmtp/etc/gmail.crt http://www.geotrust.com/resources/extended-validation-ssl/certs/Equifax%20Secure%20Certificate%20Authority.crt 
  29. ln -s /usr/local/msmtp/bin/msmtp /usr/bin/ 
  30. echo "set sendmail=/usr/bin/msmtp" >> /etc/mail.rc  
  31.  
  32. 脚本2 <监控mysql服务器主从,来自抚琴煮酒> 
  33. #!/bin/bash  
  34. #check MySQL_Slave Status 
  35. #crontab time every 10 min
  36. test -e /data0/mysql/check_mysql_slave.log || touch /data0/mysql/check_mysql_slave.log  
  37. chown mysql.mysql /data0/mysql/check_mysql_slave.log  
  38.  
  39. MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'
  40. MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'
  41. STATUS=$(/usr/local/mysql/bin/mysql -uadmin -ppassword -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running"
  42. IO_env=`echo $STATUS | grep IO | awk  ' {print $2}'
  43. SQL_env=`echo $STATUS | grep SQL | awk  '{print $2}'
  44. DATA=`date +"%y-%m-%d %H:%M:%S"
  45.  
  46. if [ "$MYSQLPORT" == "3306" ] 
  47. then 
  48.     echo "mysql is running" 
  49. else 
  50.     mail -s "ERROR!server: $MYSQLIP mysql is down" [email protected]  -c [email protected] -c [email protected] -c [email protected] 
  51. fi 
  52.  
  53. if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ] 
  54. then 
  55.     echo "Slave is running!" 
  56. else 
  57.     echo "####### $DATA #########">> /data0/mysql/check_mysql_slave.log 
  58.     echo "Slave is not running!" >>  /data0/mysql/check_mysql_slave.log 
  59.     echo "Slave is not running!" | mail -s "ERROR! $MYSQLIP MySQL Slave is not running" [email protected] -c [email protected] -c [email protected] -c [email protected] 
  60. fi 

 最近因实际需求,对脚本做了以下更改,添加了DNS的监控。与上一个有些区别的就是,经一发邮件出来。而不是有一个错就发会邮件出来。

  
  
  
  
  1. #!/bin/bash  -x 
  2. #check MySQL_Slave Status and check dns status 
  3. #crontab time 00:10 
  4. test -e /data0/mysql/check_mysql_slave.log || touch /data0/mysql/check_mysql_slave.log  
  5. chown mysql.mysql /data0/mysql/check_mysql_slave.log  
  6.  
  7. MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'` 
  8. MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'` 
  9. STATUS=$(/usr/local/mysql/bin/mysql -uadmin -ppassword -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running") 
  10. IO_env=`echo $STATUS | grep IO | awk  ' {print $2}'` 
  11. SQL_env=`echo $STATUS | grep SQL | awk  '{print $2}'` 
  12. DATA=`date +"%y-%m-%d %H:%M:%S"` 
  13.  
  14.  > /data0/mysql/check_mysql_slave.log  
  15.  
  16. if [ "$MYSQLPORT" == "3306" ] 
  17. then 
  18.     echo "mysql is running" 
  19. else 
  20.     echo "Mysql Server is not running!" >>  /data0/mysql/check_mysql_slave.log 
  21. fi 
  22.  
  23. if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ];then 
  24.     echo "Slave is running"  
  25.     ps aux | grep bind | grep -v grep > /dev/null  
  26.     if [ "$?" == "0" ];then 
  27.         echo "Bind9 is running" 
  28.     else 
  29.         echo "####### $DATA #########">> /data0/mysql/check_mysql_slave.log 
  30.         echo "Bind9 is not running!" >>  /data0/mysql/check_mysql_slave.log 
  31.     fi 
  32. else 
  33.     echo "####### $DATA #########">> /data0/mysql/check_mysql_slave.log 
  34.     echo "Slave is not running!" >>  /data0/mysql/check_mysql_slave.log 
  35. fi 
  36.  
  37. LINE=`wc -l /data0/mysql/check_mysql_slave.log | awk '{print $1}' ` 
  38. if [ "$LINE" -gt "0" ];then 
  39.     cat /data0/mysql/check_mysql_slave.log | mail -s "PLOBLEAM: DNS SERVER $MYSQLIP ERROR INFORMATION" [email protected] 
  40. fi 

线上机器运行

  
  
  
  
  1. + test -e /data0/mysql/check_mysql_slave.log 
  2. + chown mysql.mysql /data0/mysql/check_mysql_slave.log 
  3. ++ netstat -na 
  4. ++ grep LISTEN 
  5. ++ grep 3306 
  6. ++ awk '-F[: ]+' '{print $5}' 
  7. MYSQLPORT=3306 
  8. ++ ifconfig eth0 
  9. ++ grep 'inet addr' 
  10. ++ awk '-F[: ]+' '{print $4}' 
  11. MYSQLIP=118.X.X.X 
  12. ++ /usr/local/mysql/bin/mysql -uadmin -ppassword -S /tmp/mysql.sock -e 'show slave status\G' 
  13. ++ grep -i running 
  14. STATUS='             Slave_IO_Running: Yes 
  15.             Slave_SQL_Running: Yes' 
  16. ++ echo Slave_IO_Running: Yes Slave_SQL_Running: Yes 
  17. ++ grep IO 
  18. ++ awk ' {print $2}' 
  19. IO_env=Yes 
  20. ++ echo Slave_IO_Running: Yes Slave_SQL_Running: Yes 
  21. ++ grep SQL 
  22. ++ awk '{print $2}' 
  23. SQL_env=Yes 
  24. ++ date '+%y-%m-%d %H:%M:%S' 
  25. DATA='12-12-28 18:44:14' 
  26. + '[' 3306 == 3306 ']' 
  27. + echo 'mysql is running' 
  28. mysql is running 
  29. + '[' YesYes = Yes -a YesYes = Yes ']' 
  30. + echo 'Slave is running' 
  31. Slave is running 
  32. + ps aux 
  33. + grep bind 
  34. + grep -v grep 
  35. + '[' 0 == 0 ']' 
  36. + echo 'Bind9 is running' 
  37. Bind9 is running 
  38. ++ wc -l /data0/mysql/check_mysql_slave.log 
  39. ++ awk '{print $1}' 
  40. LINE=5 
  41. + '[' 5 -ne 0 ']' 
  42. + cat /data0/mysql/check_mysql_slave.log 
  43. + mail -s 'PLOBLEAM: DNS SERVER 118.X.X.X ERROR INFORMATION' [email protected]

 

你可能感兴趣的:(shell,Mysql主从,msmtp)