连接到mariadb主机的zabbix服务器:无法通过套接字连接到本地MySQL服务器

时间:2017-11-05 22:31:06

标签: mariadb zabbix

我有一台Dockerized Zabbix服务器(3.4)连接到具有Mariadb的CentOS 7主机。

这个很好用:

# zabbix_get -s <ipOfRemoteHost> -p 10050 -k mysql.version
mysql  Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1

这个没有:

# zabbix_get -s <ipOfRemoteHost> -p 10050 -k mysql.ping
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!

来自/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

UserParameter=mysql.version,mysql -V
UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep -c alive

当我将host=localhost更改为host=127.0.0.1时,它会读取HOME目录中的.my.cnf:

# zabbix_get -s <ipOfRemoteHost> -p 10050 -k mysql.ping
mysqladmin: connect to server at '127.0.0.1' failed
error: 'Can't connect to MySQL server on '127.0.0.1' (13)'
Check that mysqld is running on 127.0.0.1 and that the port is 3306.
You can check this by doing 'telnet 127.0.0.1 3306'

还尝试直接在命令中添加用户名和密码,但结果相同:

UserParameter=mysql.ping,mysqladmin -uroot --password="mypassword" ping | grep -c alive

在主机上运行该命令可以正常工作:

mysqladmin -uroot --password="mypassword"  ping | grep -c alive
1

代理本身似乎运行良好:

$ sudo -u zabbix zabbix_agentd -t mysql.ping
mysql.ping                                    [t|1]

套接字可用:

# ls -l /var/lib/mysql/mysql.sock
srwxrwxrwx. 1 mysql mysql 0 Nov  5 18:01 /var/lib/mysql/mysql.sock

流程详情:

# ps -ef | grep mysqld
mysql     3218     1  0 18:01 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql     3488  3218 99 18:01 ?        06:08:26 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
systemd+  6547  6530  0 Oct31 ?        00:06:15 mysqld --character-set-server=utf8 --collation-server=utf8_bin

有什么建议吗?

注意:不要认为它是相关的,但为了以防万一,在主机上我还有一个在端口3307上运行的Dockerized mysql

2 个答案:

答案 0 :(得分:0)

由于cgroup网络命名空间,容器中的

localhost / 127.0.0.1与主机上的localhost / 127.0.0.1不同。在.my.cnf中使用适当的IP或在主机网络命名空间(docker run --net host ...)中运行容器。

如果要从容器中使用套接字进行MySQL连接,则需要使用Docker卷。您可能遇到套接字权限,套接字所有者等问题...我建议使用IP连接方法。

答案 1 :(得分:0)

原因是selinux。 selinux禁止Zabbix代理访问mysql套接字文件以及可能的其他资源。

尝试tail -f /var/log/audit/audit.log时运行zabbix_get,您会实时看到拒绝。

然后,您需要设计一个selinux策略,以便根据需要进行访问。