监控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版本;
安装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
$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时间戳