数据库版本 为 Mysql 5.7.14
近期新装了一台机器 对他进行zabbix监控,一切按照之前的操作 到 mysql监控部分,发现原来的脚本获取不到 mysql 端口了 :
原来 mysql 5.6 以后 默认的 bind_address 没有做设置 , 看个人需求 这里测试设为 bind_address = 0.0.0.0
./discovery_mysql.sh 此脚本前面的zabbix监控mysql的文章中有不做说明
OK 得到 需要的数据了
- {
- "data":[
- {
- "{#MYSQLPORT}":"3306"},
- {
- "{#MYSQLPORT}":"3307"}
- ]
- }
再然后 看看获取的数据
[root@monitoring shell]# zabbix_get -s 127.0.0.1 -k mysql_stats[3306,Key_reads]
- mysql: [Warning] Using a password on the command line interface can be insecure.
- 3
mysql: [Warning] Using a password on the command line interface can be insecure. 这什么鬼!!!!
原来 mysql 5.6 及以上版本增加了密码安全策略,之前版本可以使用的命令行里加上密码就会强制报错
这个错并不影响使用 连接mysql 以及dump , 但是对于一些监控获取数据就有影响了 , 尽管依然可以得到数据,可是却多了一行报错的信息, 这样数据的格式就有问题了。看了一些文档 说是在 my.cnf 中加上用户 密码 ,尝试N次 , 根本就不行 。
不好好查查 mysql 5.7 版本的使用真不行哇 , 比起mysql 5.5 很多用法发生了改变 , 5.6 以后想要 不出现这个错 使用 mysql_config_editor
mysql_config_editor
该工具可以创建一个"login-path",用户可以直接通过login-path来登录mysql。
实质上,它存储一个身份认证信息到一个叫做.mylogin.cnf的的登录文件中。
并且,该工具至少在mysql5.6.6以上的版本才可用。
创建一个login-path:
- shell> mysql_config_editor set --login-path=test --user=root --password --host=localhost
- Enter password:
命令解释:
--login-path是设置访问的名字,我设置的local;
--host是指定允许访问的host地址,这个地址是你grant的时候配置的;
--user是用户名,也是grant时候配置的;
-p是指定密码,同样是grant配置。
创建好后,.mylogin.cnf将保存在用户的家目录下,此处我用的是RHEL6,即/home/op下。
该文件是不可读的,它类似于选项组,包含单个身份的验证信息。
在登录mysql时,可以指定创建的login-path名,然后直接进入:
shell> mysql --login-path=test-login
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 4
- Server version: 5.6.26-log Source distribution
但是如果有人能够拿到该文件,通过一些方式,是可以将其破解并获取你的密码。
login-path只能被创建用户使用(OS层面)。
如果想看.mylogin.cnf里写了什么,可以使用:
shell> mysql_config_editor print --all
- [test_login]
- user = root
- password = *****
- [test]
- user = root
- password = *****
- host = localhost
当然想只看某一个则可写作
shell> mysql_config_editor print --login-path=test
- [test]
- user = root
- password = *****
- host = localhost
若要删除.mylogin.cnf,则可以使用
- shell> mysql_config_editor remove --login-path=test
其他参数选项:
Format | Description | Introduced |
---|---|---|
--all | Print all login paths | |
--debug[=debug_options] | Write a debugging log | |
--help | Display help message and exit | |
--host=host_name | Host to write to login file | |
--login-path=name | Login path name | |
--password | Solicit password to write to login file | |
--port=port_num | TCP/IP port number to write to login file | 5.6.11 |
--socket=path | The Unix socket file name to write to login file | 5.6.11 |
--user=user_name | User name to write to login file | |
--verbose | Verbose mode | |
--version | Display version information and exit | |
--warn | Warn and solicit confirmation for overwriting login path |
测试 --login-path
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.14-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
上面就配置好了mysql安全模式访问
zabbix agentd配置
下面介绍zabbix客户端配置文件里key的情况
- cat /etc/zabbix/zabbix_agentd.d/auto_mysql.conf
- UserParameter=zabbix_low_discovery[*],/bin/bash /etc/zabbix/shell/mysql_low_discovery.sh $1
- UserParameter=mysql_stats[*],mysql -h localhost -P $1 -uzabbix -p'8i58kdeey2mQ' -e "show global status"|grep "\<$2\>"|cut -f2
修改为
- UserParameter=zabbix_low_discovery[*],/bin/bash /etc/zabbix/shell/mysql_low_discovery.sh $1
- UserParameter=mysql_stats[*],mysql --login-path=local -P $1 -e "show global status"|grep "\<$2\>"|cut -f2
然后配置sudo,在/etc/sudoers里添加
其中/usr/bin/mysql是mysql程序地址,可以根据你自身情况修改。
完成后重启zabbix agentd
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ][root@monitoring ~]# zabbix_get -s 127.0.0.1 -k mysql_stats[3306,Key_reads]
3
没有评论