MYSQL双主同步+同步检查脚本+邮件报警脚本

第一篇博客,不知道写点什么,平常都是用有道云笔记去记录一些工作中的内容,从今天开始写博客吧;
 
环境:centos6.6
源:epel
由于本次测试mysql是yum直接安装的
mysql版本
两台机器同时安装mysql  设置密码
setpasswordfor'root''localhost'password'newpasswd'进入Mysql
show master status\G;
报错:(配置文件中没有开启开启二进制日志)
解决办法:开启二进制 或者从其他机器拷贝my.cnf
然后进入数据库,查看状态,发现有值了
两台机器分别授权同步用户
grant replication slave on *.* to 'replication'@'192.168.1.9' identified by 'replication.rzrk';
flush privileges;
两台机器分别上读锁
flush tables with read lock;#防止进入新的数据 
两台机器分别执行同步
change master to master_host='192.168.1.9',master_user='replication',
master_password='replication.rzrk',master_log_file='mysql-bin.000004',master_log_pos=361;
全部执行s
start slave;
show slave status\G;
成功
 
解锁
 
测试 在一台机器建库
另一台机器查看
由于是双主同步 所以在另外一台机器建库也会同步(同理)
双主同步有一个特点,你把A数据库的slave先给停掉 在B机器数据库创建一个库,这时A机器是没有显示新建的库的,
但是当你再次启动A机器的slave,A机器就有B机器刚才建的库了
 
 
 

检查主从同步脚本

脚本设计思路:
1、此脚本应该能适应各种各样不同的内外网环境,即IP不同的环境;
2、让脚本也顺便监控下MySQL是否正常运行;
3、Slave机器的IO和SQL状态都必须为YES,缺一不可,这里用到了多重条件判断-a。
脚本产生的背景环境:
我有不少基于公网类型的网站(没有硬件防火墙,直接置于IDC机房)做的都是MySQL主从架构,从机主要起备份数据库和冷备份的作用,虽然从机宕机了问题不大,但也影响数据的备份工作;这样的网站有数十个,如果一个一个手动的检查,每天都要浪费不少时间,所以玩了下脚本控,设计了如上脚本。
脚本实践:
此脚本我已用于了生产环境,大家可以放在我们的从MySQL机器上,用来监控;另外建议有时也手动检查下
后期应用:
后期公司的MySQL数据库准备由一主一从架色升级成一主多从,读写分离的架构,LVS作从数据库的负载均衡器,此脚本自动监控从MySQL的replication状态,如果不能同步则自动关闭本机的MySQL服务,免得影响整个网站的正常业务访问。当然了,到时脚本的运行周期肯定也需要更改,由10分钟变成秒级的,这个可以通过while循环来实现。
 
 
 
 
每分钟执行一次
 
 
 

优化:使用python发送邮件(linux自带的mail发送邮件并不好用,所以决定使用python写一个邮件脚本)

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3  
 4 import smtplib
 5 from email.mime.text import MIMEText
 6 from email.header import Header
 7  
 8 # 第三方 SMTP 服务
 9 mail_host="smtp.exmail.qq.com"  #设置服务器
10 mail_user="shenjianyu@thinktrader.net"    #用户名
11 mail_pass="s2105"   #口令
12  
13  
14 sender = 'shenjianyu@thinktrader.net'
15 receivers = ['976299670@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
16  
17 message = MIMEText('warn!server: mysql is down', 'plain', 'utf-8')
18 message['From'] = Header("172.30.1.207", 'utf-8')
19 message['To'] =  Header("测试", 'utf-8')
20  
21 subject = 'MYSQL故障'
22 message['Subject'] = Header(subject, 'utf-8')
23  
24  
25 try:
26     smtpObj = smtplib.SMTP()
27     smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
28     smtpObj.login(mail_user,mail_pass)
29     smtpObj.sendmail(sender, receivers, message.as_string())
30     print "邮件发送成功"
31 except smtplib.SMTPException:
32     print "Error: 无法发送邮件"

 

在检查主从同步脚本中添加一行
 
 
发送邮件成功

 

 
posted @ 2017-02-13 09:44  沈剑宇  阅读(1268)  评论(0编辑  收藏  举报