编辑:

编辑:

我有一台安装了 zabbix 代理的服务器,它运行正常。

我想监控服务器上的数据库,我按照的文档进行操作MySQL by Zabbix agent

我的日志里有一个错误

mysqladmin: connect to server at '127.0.0.1' failed
error: 'Access denied for user 'zabbix'@'localhost' (using password: NO)'

以下是日志的较长部分:

 15110:20220919:154820.657 In zbx_waitpid()
 15110:20220919:154820.657 zbx_waitpid() exited, status:0
 15110:20220919:154820.658 End of zbx_waitpid():15142
 15110:20220919:154820.658 Run remote command [ mysqladmin -h"127.0.0.1" -P"3306" ping] Result [0] []...
 15110:20220919:154820.658 Sending back []
 15110:20220919:154820.658 listener #2 [waiting for connection]
 15110:20220919:154820.719 listener #2 [processing request]
 15110:20220919:154820.719 Requested [system.cpu.util[,iowait]]
 15110:20220919:154820.719 Sending back [0.071416]
 15110:20220919:154820.719 listener #2 [waiting for connection]
 15111:20220919:154821.077 listener #3 [processing request]
 15111:20220919:154821.077 Requested [mysql.ping["127.0.0.1","3306"]]
 15111:20220919:154821.077 In zbx_popen() command:' mysqladmin -h"127.0.0.1" -P"3306" ping'
 15111:20220919:154821.078 End of zbx_popen():8
 15143:20220919:154821.078 zbx_popen(): executing script
mysqladmin: connect to server at '127.0.0.1' failed
error: 'Access denied for user 'zabbix'@'localhost' (using password: NO)'
 15111:20220919:154821.089 In zbx_waitpid()
 15111:20220919:154821.089 zbx_waitpid() exited, status:0
 15111:20220919:154821.089 End of zbx_waitpid():15143
 15111:20220919:154821.089 Run remote command [ mysqladmin -h"127.0.0.1" -P"3306" ping] Result [0] []...
 15111:20220919:154821.089 Sending back []
 15111:20220919:154821.090 listener #3 [waiting for connection]
 15112:20220919:154821.114 In send_buffer() host:'<ip>' port:10051 values:0/100
 15112:20220919:154821.114 End of send_buffer():SUCCEED
 15112:20220919:154821.114 active checks #1 [idle 1 sec]
 15108:20220919:154821.116 collector [processing data]
 15108:20220919:154821.116 In update_cpustats()
 15108:20220919:154821.116 End of update_cpustats()
 15108:20220919:154821.116 collector [idle 1 sec]
 15109:20220919:154821.543 listener #1 [processing request]

但我的.my.cnf那个看起来/var/run/zabbix/像这样:

[client]
user='zbx_monitor'
password='<password>'

用户的主目录zabbix就是/var/run/zabbix/这样工作的。

我在其他服务器上也做过,运行良好。但在这个服务器上却.my.cnf不行,我找不到原因。

服务器之间唯一不同的地方是:

  • 主目录
  • 服务器日期,因此 Linux 版本不同

你知道什么可能导致这个问题吗?

编辑:

namei -l /var/run/zabbix/.my.cnf

f: /var/run/zabbix/.my.cnf
drwxr-xr-x root   root   /
drwxr-xr-x root   root   var
lrwxrwxrwx root   root   run -> /run
drwxr-xr-x root   root     /
drwxr-xr-x root   root     run
drwxr-xr-x zabbix zabbix zabbix
-rw-r----- zabbix zabbix .my.cnf

如果我尝试以用户身份运行该命令,zabbix它会起作用:

sudo -u zabbix mysqladmin -h"127.0.0.1" -P"3306" ping
mysqld is alive

因此,仅当 zabbix 代理运行命令时才会发生错误。

这是我的 zabbix 用户的主目录

getent passwd zabbix
zabbix:x:109:115::/var/run/zabbix/:/bin/false

答案1

即使我的 Zabbix 用户的主目录是/var/run/zabbix,但它似乎不是 zabbix 命令用作主目录的目录。

我是/etc/zabbix/zabbix_agentd.conf.d/template_db_mysql.conf这样改变的,我HOME=/var/run/zabbix在每个命令前添加了:

UserParameter=mysql.ping[*],HOME=/var/run/zabbix mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], HOME=/var/run/zabbix mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], HOME=/var/run/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"

答案2

你的权限.my.cnf太开放了。

$ ls -l .my.cnf
-rwxrwxrwx 1 user user 44 Sep 14 15:40 .my.cnf
$ mysqladmin ping
mysqladmin: [Warning] World-writable config file '/home/user/.my.cnf' is ignored.
mysqladmin: connect to server at 'localhost' failed

设置适当的权限。

chmod 640 /var/run/zabbix/.my.cnf

答案3

不要在你的值两边加上单引号,

[client] 
user='zbx_monitor' 
password='<password>' 

让我们知道结果如何。

相关内容