1. 程式人生 > 實用技巧 >zabbix-監控mysql

zabbix-監控mysql

監控mysql

主要監控myql的連線數、主從同步狀態、同步延遲等。

實現mysql主從同步

從節點配置:
1、apt install mysql-server

2、vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
bind-address            = 0.0.0.0
relay-log = /var/lib/mysql/relay-log
server-id = 204

3、systemctl restart mysql


主節點配置:
1、vim /etc/mysql/mysql.conf.d/mysqld.cnf 
[mysqld]
bind-address            = 0.0.0.0
server-id = 203
log-bin = /var/lib/mysql/master-log

2、systemctl restart mysql

mysql-master建立授權同步賬號

mysql> grant replication slave on *.* to 'mysql-slave'@'192.168.3.%' identified by 'linux';

將主節點的資料備份到一個sql檔案中

1、mysqldump --all-databases --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql

2、scp /opt/backup.sql 192.168.3.204:/opt

從節點匯入sql語句

1、mysql < /opt/backup.sql

2、head -n30 /opt/backup.sql  #檢視二進位制日誌位置
CHANGE MASTER TO MASTER_LOG_FILE='master-log.000002', MASTER_LOG_POS=154;
#則表示master-log.000002之前的已經匯入到當前的mysql中,從MASTER_LOG_POS=154之後的資料開始做主從同步

3、mysql> CHANGE MASTER TO MASTER_HOST='192.168.3.203',MASTER_USER='mysql-slave',MASTER_PASSWORD='linux',MASTER_LOG_FILE='master-log.000002',MASTER_LOG_POS=154;
#指定主從同步資訊,指定同步賬號,從指定的位置開啟同步

4、mysql> start slave;   #開啟同步執行緒

5、mysql> show slave status\G;

zabbix通過percona外掛監控mysql資料

percona外掛會使用php獲取mysql上的資料,所以需要安裝php連線mysql的軟體包;
安裝完percona外掛,裡面會有一個自定義監控項的配置檔案以及一個shell和php指令碼,在通過監控項查詢資料時會呼叫shell指令碼,當在300s內還要查詢這些監控項,則shell指令碼會通過判斷/tmp/下的指定檔案的建立檔案時的時間戳與當前時間做對比(第一次查詢監控項的資料時,會生成此檔案),如果小於300s,則不進行查詢,如果大於300s,才進行查詢;
shell指令碼查詢監控項的資料時,會通過呼叫php指令碼獲取資料庫中的資料;
目前Percona與ubuntu自帶的php 7.2不相容,需要安裝php 5.6版本;

<https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html > #percona外掛幫助文件
https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/ #外掛下載地址

安裝percona外掛

1、dpkg -i percona-zabbix-templates_1.1.8-1.artful_all.deb

2、cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.conf.d/
#將percona官方的自定義監控項配置檔案拷貝到zabbix agent的目錄下

3、

安裝php

1、add-apt-repository ppa:ondrej/php         #安裝php源

2、apt update

3、apt install -y php5.6 php5.6-mysql

4、vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user ='root';
$mysql_pass ='';
#建立連線mysql的認證檔案,php連線mysql需要有賬號密碼連線,並且該賬號需要有許可權訪問資料庫中的資料

5、/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
#通過指令碼檢視是否能夠獲取到資料庫中的資料

mysql-master伺服器上agent的配置

1、vim /etc/zabbix/zabbix_agentd.conf            #匯入自定義監控項的配置檔案
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
User=root
AllowRoot=1

2、vim /lib/lib/systemd/system/zabbix-agent.service   
#指定agent的service檔案中啟動agent的使用者及組為root

3、systemctl daemon-reload

2、systemctl restart zabbix-agent

注:
修改agent的啟動使用者為root是因為,agent需要執行指令碼去連線資料庫,但是有的許可權不支援普通使用者執行,所以修改為root啟動agent,去執行指令碼

縮小資料獲取間隔

1、vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then     #修改指令碼資料獲取間隔

2、zabbix web上也需要把模板的監控項資料獲取間隔修改為60s

server端測試

/apps/zabbix-server/bin/zabbix_get -s 192.168.3.203 -p 10050 -k MySQL.Open-files
zabbix web上也需要建立模板,把模板關聯到主機;percona自帶的模板不相容zabbix 3、4,所以無法使用

mysql監控指令碼

此指令碼配置在mysql從節點上,主要用於檢視從節點的主從同步延遲,以及主從同步的執行緒是否開啟

1、vim /etc/zabbix/zabbix_agentd.d/mysql_monitor.sh
#!/bin/bash
  
Seconds_Behind_Master() {
        NUM=$(mysql -uroot -e "show slave status\G;" | grep  Seconds_Behind_Master | awk '{print $NF}')
        echo "$NUM"
}

master_slave_check() {
        NUM1=$(mysql -uroot -e "show slave status\G;" | grep  -w Slave_IO_Running | awk '{print $NF}')
        NUM2=$(mysql -uroot -e "show slave status\G;" | grep  -w Slave_SQL_Running | awk '{print $NF}')

        if [ $NUM1 == 'Yes' ] && [ $NUM2 == 'Yes' ];then
                echo 50
        else
                echo 100
        fi
}

main() {
        case $1 in
        Seconds_Behind_Master)
                Seconds_Behind_Master
                ;;
        master_slave_check)
                master_slave_check
                ;;
        esac
}

main $1

2、chmod a+x /etc/zabbix/zabbix_agentd.d/mysql_monitor.sh

agent配置

1、vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
AllowRoot=1      #zabbix使用者是無法使用root賬號登入資料庫的
User=root

2、vim /etc/zabbix/zabbix_agentd.d/all.conf
UserParameter=mysql_monitor[*],/etc/zabbix/zabbix_agentd.d/mysql_monitor.sh "$1"
#所有的自定義監控項都放到一個單獨的配置檔案中,方便以後批量複製

3、vim /lib/systemd/system/zabbix-agent.service
User=root
Group=root

4、systemctl daemon-reload

5、systemctl restart zabbix-agent

server端測試

/apps/zabbix-server/bin/zabbix_get -s 192.168.3.204 -p 10050 -k mysql_monitor["Seconds_Behind_Master"]
0

小知識

stat -c %y FILENAME    #檢視此檔案建立時的unix時間戳