主干状态,主从复制陈设

By admin in 4858.com on 2019年2月11日

1.编纂python的督察脚本

1 ) mysql 主从复制 (实时与异步,一主多从,一主一从)

zabbix监控mysql
主从的处境,写一的脚本,然后设置一个key,成立模板套用这么些key 获取mysql
的中坚状态是否健康。

发布:thebaby   来源:net     【大 中 小】

  A.通过拿到mysql库中的状态值来判断这一个mysql主从气象是或不是健康

备考:单向策略;主从本身就是一种备份,一般从就用于备份;

分享一例shell脚本,用于修改mysql的主旨同步难点,有亟待的心上高丽参考下啊。

4858.com 1

4858.com 2

4858.com,1.那边把我的本子贴一下,脚本要给可举行权限

一个方可修改mysql主干状态,主从复制陈设。主干同步的shell脚本。

       B.举行七个状态值的论断

主从不同,解决办法(越发支付项目):

        1) 出标题之间的主节点中 bin-log,复苏到备份节点上。

        2) 双写主

        3) 程序写log的1秒钟在内存,主一但宕机

        4) 异步改实时

a. 有利于数据库健壮性,提升访问速度,易于管理

b. 可以着力服务器互为备份

c. 读写分离(程序完毕,测试环境mysql-proxy,amoeba, 分布式dbproxy)

一同的时候有二个线程完毕(IO线程,SQL线程),主从复制依赖binlog

主节点:IO线程

从节点:IO线程,SQL线程(实时监控relay-log)写到数据文件,master_info
(bin-log信息)

1)  slave节点执行start slave,开启主从开关;

2)此时,slave节点的IO线程会通过在master上授权的复制用户权限请求连接master节点,并恳请从指定binlog日志文件的指定地方(日志文件名和职位就是在配备主从复制节点
时执行change master命令时指定的)之后发送binlog日志内容

3)
master在承受从节点IO线程请求后,负载读取从节点请求中binlog相关音讯,将指定binlog日志发送给从节点;然后从节点更新masterinfo消息,记录binlog地点。

4)slave节点IO线程获取到master的IO发送的日记,将写到relay-log(中继日志),然后从节点sql线程将relay-log写到从节点的数据文件。

主节点/etc/my.cnf配置,从节点log-bin打不打开都可以,最终把server-id分开不要一样即可

log-bin=/data/mysqldb/mysql-bin

server-id      = 1

主库

GRANT REPLICATION SLAVE,FILE,RELOAD,SUPER ON *.* TO
‘per’@’10.150.100.143’ IDENTIFIED BY ‘123456’;

#新建用户给工作应用

grant all privileges on MOVIE_REPORT.* to ‘MOVIE_REPORT’@’%’ 
identified by ‘MOVIE_REPORT_2o1o’;

flush privileges;

#锁表(主节点)

flush tables with read lock;(unlock tables)

#主节点备份

mysqldump -uroot -p123456 -S /usr/local/mysql/mysql.sock -A  -B
–events|gzip >/opt/rep.sql.gz

#从节点导入

mysql -uroot -p123456 -S /usr/local/mysql/mysql.sock

CHANGE MASTER TO

MASTER_HOST = ‘10.150.100.144’,

MASTER_USER = ‘per’,

MASTER_PASSWORD = ‘123456’,

MASTER_PORT = 3306,

MASTER_LOG_FILE=’mysql-bin.000009′,

MASTER_LOG_POS=106;

#开行复制

mysql> start slave;

change master to master_log_file=’mysql-bin.000011′,
master_log_pos=1;

一旦从节点那二线程为yes,则为正规(10.150.100.143 从节点)

sql > show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

#查看 bin-log信息

show master status;

#!/bin/bash

例子:
 

  4858.com 3

#auther: joj

复制代码代码示例:

       C.举行调取钉钉机器人,发送音信

#description  zabbix agent mysql slave status script

#!/bin/sh
#修补mysql主从同步
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
LOGFILE=/data/repair_mysql_sync_`date +%F`.log
SQLCMD1=”show slave status”
#查阅MySQL是还是不是启动
retval=`ps aux | grep mysqld | grep -v grep`
if [ “${retval}X” = “X” ]; then
    echo The MySQL is not running at: `date +%F” “%H-%M-%S` >>
${LOGFILE}
    exit 1
fi
#获得MySQL从端Relay binlog的路径
retval=`grep “^relay-log” /etc/my.cnf | grep -v relay-log- | grep
‘/’`
if [ “${retval}” = “X” ]; then
    RELAY_BINLOG_PATH=`ps aux | grep -w mysqld | grep -v grep
| awk ‘{print $13}’ | awk -F
‘=’ ‘{print $2}’`
else
    RELAY_BINLOG_PATH=`dirname $(echo ${retval} | awk -F ‘=’ ‘{print
$2}’)`
fi
#找寻master.info文件,用于固定Binlog音信
MASTER_FILE=`ps aux | grep -w mysqld | grep -v grep | awk ‘{print
$13}’ | awk -F ‘=’ ‘{print $2}’`/master.info
if [ ! -e ${MASTER_FILE} ]; then
   echo This Server is not MySQL Slave at: `date +%F” “%H-%M-%S`
>> ${LOGFILE}
   exit 1
fi
#收获当前的联手状态
IO_STATUS=`mysql -uroot -e “${SQLCMD1}\G;” | awk
‘$1==”Slave_IO_Running:” {print $2}’`
SQL_STATUS=`mysql -uroot -e “${SQLCMD1}\G;” | awk
‘$1==”Slave_SQL_Running:” {print $2}’`
if [[ “${IO_STATUS}” = “Yes” && “${SQL_STATUS}” = “Yes” ]]; then
   echo Now, The MySQL Replication is synchronous at: `date +%F”
“%H-%M-%S` >> ${LOGFILE}
   exit 0
fi
#从master.info文件中,拿到MySQL主端的同台新闻
REPLI_INFO=`sed ‘/^$/d’ ${MASTER_FILE} | tail +2 | head -5`
REPLI_BINLOG_FILE=`echo ${REPLI_INFO} | awk ‘{print $1}’`
REPLI_IPADDR=`echo ${REPLI_INFO} | awk ‘{print $3}’`
REPLI_USER=`echo ${REPLI_INFO} | awk ‘{print $4}’`
REPLI_PWD=`echo ${REPLI_INFO} | awk ‘{print $5}’`
#除去无用的Relay binlog
rm -rf ${RELAY_BINLOG_PATH}/*-relay-bin.*
#直白从0地点上马共同
SQLCMD2=”change master to master_host=’${REPLI_IPADDR}’,
master_user=’${REPLI_USER}’, master_password=’${REPLI_PWD}’,”
SQLCMD2=”${SQLCMD2} master_log_file=’${REPLI_BINLOG_FILE}’,
master_log_pos=0″
mysql -uroot -e “stop slave;”
mysql -uroot -e “${SQLCMD2};”
mysql -uroot -e “start slave;”
#若是同步的经过中,出现重复记录导致同步战败,就跳过
while true
do
   sleep 2
   IO_STATUS=`mysql -uroot -e “${SQLCMD1}\G;” | awk
‘$1==”Slave_IO_Running:” {print $2}’`
   SQL_STATUS=`mysql -uroot -e “${SQLCMD1}\G;” | awk
‘$1==”Slave_SQL_Running:” {print $2}’`
   BEHIND_STATUS=`mysql -uroot -e “${SQLCMD1}\G;” | awk
‘$1==”Seconds_Behind_Master:” {print $2}’`
   SLAVE_BINLOG1=`mysql -uroot -e “${SQLCMD1}\G;” | awk
‘$1==”Master_Log_File:” {print $2}’`
   SLAVE_BINLOG2=`mysql -uroot -e “${SQLCMD1}\G;” | awk
‘$1==”Relay_Master_Log_File:” {print $2}’`
   #并发谬误,就将错误新闻记录到日志文件,并跳过不当继续联手
   if [[ “${IO_STATUS}” != “Yes” || “${SQL_STATUS}” != “Yes” ]];
then
       ERRORINFO=`mysql -uroot -e “${SQLCMD1}\G;” | awk -F ‘: ‘
‘$1==”Last_Error” {print $2}’`
       echo “The MySQL synchronous error information: ${ERRORINFO}”
>> ${LOGFILE}
       mysql -uroot -e “stop slave;”
       mysql -uroot -e “set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;”
       mysql -uroot -e “start slave;”
       #已到位一道,就正常退出
   elif [[ “${IO_STATUS}” = “Yes” && “${SQL_STATUS}” = “Yes” &&
“${SLAVE_BINLOG1}” = “${SLAVE_BINLOG2}” && ${BEHIND_STATUS} -eq 0
]]; then
      echo The MySQL synchronous is ok at: `date +%F” “%H-%M-%S`
>> ${LOGFILE}
      break
 fi
done

4858.com 4    

user=root

您或许感兴趣的小说:
机动配置mysql主从的shell脚本
监察mysql主从正常景况的shell脚本
mysql主从监察的shell脚本

2.装置定时职责拓展脚本运行

passwd=123456

正文地址:

  crontab -e    添加定时任务

port=$1

  */5 * * * * source ~/.bashrc && /usr/bin/python
/lvdata/send_msg.py 

#自定义函数status

  给脚本执行权限  chmod +x /lvdata/send_msg.py

function status {

     
那里出现一个题材,就是手工能执行脚本,但定时职务时不或者实施python脚本,参考解决方法:

status=`/opt/mysql/mysql3306/bin/mysql -uroot -S
/opt/mysql/mysql3306/var/mysql.sock -p123456 -e “show slave
status\G;”|egrep ‘Slave_IO_Running|Slave_SQL_Running’|awk ‘{print
$2}’|egrep ‘Yes’|wc -l`

  1.将脚本中的中文举行删减或转移为英文

if [ $status = 2 ];then

        2.在对日记监控查看时,脚本确以执行,但尚未达到预期的职能

echo 2

  tail -f /var/log/cron

else

       Sep  4 18:25:01 VM_DATA_ANALYSIS_DB_38 CROND[20870]: (root)
CMD (/usr/bin/python /lvdata/send_msg.py)

echo 1

  然后将定时职责展开改动 */5 * * * * source ~/.bashrc &&
/usr/bin/python /lvdata/send_msg.py,再度翻开,可以健康运转

fi

      整个脚本

}

  

#进行上面的函数

  #!/usr/bin/python

status

  import os
  import json
  import urllib2


  def get_fljr189_status():
  #获取SQL_Running 的情形值
  SQL=os.popen(“mysql -uroot -p密码-S /tmp/mysql.sock \”-e show slave
‘自定义名称’ status\G\”|grep \”Slave_SQL_Running\””)
  #获取IO_Running 的状态值
  IO=os.popen(“mysql -uroot -p密码 -S /tmp/mysql.sock \”-e show slave
‘自定义名称’ status\G\”|grep \”Slave_IO_Running\””)
  #获取IP地址
  IP=os.popen(“mysql -uroot -p密码 -S /tmp/mysql.sock \”-e show slave
‘自定义名称’ status\G\”|grep \”Master_Host\””)
  #对SQL_Running 和 IO_Running状态值进行判定
  sql_status=cmp(SQL.read().split(“:”)[1].strip(),”Yes”)
  io_status=cmp(IO.read().split(“:”)[1].strip(),”Yes”)
  ip=IP.read().split(“:”)[1]
  #万一那多个值都为Yes,则不报警
  if(sql_status==0 and io_status==0):
    pass
  else:
  #一经有不为Yes的值,则开发通过python 调用钉钉发送音讯到群中
    send_msg(ip)

2.自定义key

 

cat /etc/zabbix/zabbix_agentd.d/check_mysql.conf

 

UserParameter=sanguo.check.mysql[*],
 /data/salt/scripts/check_mysql.sh $1

#调用钉钉发送新闻到群中

重启zabbix_agent

def send_msg(ip):
  #钉钉的webhook 值,如有不明了可机关百度
  url=””
  headers={
    ”Content-Type”:”application/json”,
    ”Charset”:”UTF-8″
  }
  data={
  ”msgtype”:”text”,
  ”text”:{
  ”content”:str(ip)+”master-slave Error”
  },
  ”at”:{
    ”isAtAll”:True
  }


}
  data=json.dumps(data)
  request=urllib2.Request(url,data=data,headers=headers)
  response=urllib2.urlopen(request)
  print(response.read())

3.创造模板并链接主机

*
get_fljr189_status()

*

4858.com 5

 

(1).创建Applications

4858.com 6

(2).创建items  获取3316实例的slave状态,也可以server上用zabbix_get -s
ip -k sanguo.check.mysql[3316] 来获取值

4858.com 7

(3).创造trigger  倘若最后收获的值不对等2 就接触报警

4858.com 8

(4).成立触发action

4858.com 9

4858.com 10

4858.com 11

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有