故障分析 | MySQL 无监听端口故障排查

本文记录了一次解决MySQL服务无法远程访问的故障排查过程。通过检查进程、端口绑定及日志,发现由于skip-grants-tables参数的设置,使得MySQL默认开启了skip-networking,禁用了远程连接。解决方案是注释掉skip-grants-tables参数并重启MySQL服务。

作者:王向

爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理。擅长数据库故障处理。对数据库技术和 python 有着浓厚的兴趣。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


前言

最近解决了一个比较基础的问题故障,由于排查过程挺有意思,于是就以此为素材写出了本篇文章。

故障现场

防火墙什么的均正常但是无法被远程访问到。简单的使用客户端登录了一下。

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

根据以往经验大脑中浮现了几个常见的排查此类故障手法

1.排查进程存在

[root@wx ~]# ps -ef|grep [m]ysql 
mysql 25973 1 1 8月30 ? 02:43:20 
/mysqldata/mysql/base/8.0.24/bin/mysqld --defaults-
file=/mysqldata/mysql/etc/3308/my.cnf --daemonize --pid-
file=/mysqldata/mysql/data/3308/mysqld.pid --user=mysql --
socket=/mysqldata/mysql/data/3308/mysqld.sock --port=3308

2.排查端口绑定情况,居然没有绑定端口

[root@wx ~]# lsof -i:3308
[root@wx ~]# ss -nltp|grep 3308

3.查看启动日志发现,监听端口等于0

2022-09-06T07:30:41.090
<think>我们正在处理关于Zabbix 10051端口无法启动的问题。根据引用内容,10051端口是Zabbix Server的默认端口,所以问题可能出在Zabbix Server服务上。 我们需要按照步骤排查: 1. 检查Zabbix Server服务状态 2. 检查配置文件 3. 检查端口占用 4. 检查日志文件 5. 其他可能的问题(如数据库连接等) 根据引用[2]和[5]中的信息,我们可以得到一些线索: 引用[2]提到:编辑`/etc/zabbix/zabbix_server.conf`,修改DBHost为127.0.0.1,端口改为3306,然后重启服务。这提示我们数据库配置错误可能导致服务无法启动。 引用[5]提到:在服务端使用`zabbix_get`命令测试端口,以及如果获取不到数据可能是因为权限问题(需要给netstat加s权限或配置sudo)。但这里我们遇到的是端口无法启动,所以可能不是权限问题,而是服务本身启动失败。 具体步骤: 步骤1:检查Zabbix Server服务状态 使用命令:`systemctl status zabbix-server` 如果服务处于failed状态,我们可以查看具体错误信息。 步骤2:检查配置文件 配置文件路径:`/etc/zabbix/zabbix_server.conf` 需要确认的关键配置项: - DBHost:数据库主机地址(如果是本地,通常为localhost或127.0.0.1) - DBName:数据库名称 - DBUser:数据库用户 - DBPassword:数据库密码 - DBPort:数据库端口(默认3306) 特别要注意,如果数据库不在本地,需要确保网络可达,并且数据库用户有远程访问权限。 步骤3:检查端口占用 使用命令:`netstat -tulnp | grep 10051` 如果10051端口已经被其他进程占用,那么Zabbix Server将无法启动。如果被占用,需要停止占用该端口的进程,或者修改Zabbix Server监听端口(通过配置文件中的ListenPort参数)。 步骤4:检查日志文件 Zabbix Server的日志通常位于:`/var/log/zabbix/zabbix_server.log`(具体路径可能因安装方式不同而略有差异)。查看日志文件中的错误信息,可以快速定位问题。 步骤5:其他可能的问题 - 数据库服务是否正常运行?尝试连接数据库:`mysql -u<用户名> -p<密码> -h<主机>` - 防火墙是否开放了10051端口?如果是在本机测试,至少需要确保本地回环可以访问。如果是分布式环境,需要确保网络策略允许。 - Selinux是否关闭?或者需要设置Selinux策略允许Zabbix Server运行。 解决方案: 根据上述步骤,我们可能会发现以下常见问题及解决方案: 问题1:数据库配置错误(如引用[2]所述) 解决方案:修改`zabbix_server.conf`中的数据库配置,确保正确无误,然后重启服务:`systemctl restart zabbix-server` 问题2:端口被占用 解决方案:停止占用10051端口的进程,或者修改Zabbix Server监听端口(修改ListenPort参数,并重启服务)。 问题3:数据库服务未启动或无法连接 解决方案:启动数据库服务,并确保Zabbix Server能够连接到数据库。 问题4:权限问题(如日志文件或临时目录的权限) 解决方案:确保Zabbix Server的运行用户(通常是zabbix)对相关目录有读写权限。 问题5:防火墙阻止 解决方案:开放10051端口(如果是生产环境,还需要考虑agent连接的端口10050): firewall-cmd --permanent --add-port=10051/tcp firewall-cmd --reload 问题6:Selinux未关闭或未配置 解决方案:临时关闭Selinux:`setenforce 0`,或者永久关闭:修改`/etc/selinux/config`文件,设置`SELINUX=disabled`(需要重启)。或者配置Selinux策略允许Zabbix。 问题7:配置文件语法错误 解决方案:使用`zabbix_server -c /etc/zabbix/zabbix_server.conf`测试配置文件,根据错误提示修正。 问题8:数据库未初始化 解决方案:如果这是第一次安装,需要导入初始数据库结构。参考官方文档的数据库初始化步骤。 根据引用[5]中提到的权限问题,我们还需要注意:如果Zabbix Server在启动过程中需要执行某些命令(比如通过脚本获取数据),那么可能需要给相应的命令设置权限(如setuid或sudo),但通常启动服务本身不需要这些权限。 最后,我们按照上述步骤进行排查,一般能够解决10051端口无法启动的问题。 生成相关问题: 1. 如何修改Zabbix Server监听端口? 2. 如何检查Zabbix Server的日志? 3. 如何导入Zabbix的初始数据库? 4. Zabbix Server启动时提示数据库连接失败怎么办? 5. 如何为Zabbix Server配置Selinux?</think>### Zabbix 10051端口无法启动排查指南 #### 1. **检查服务状态与日志** - **查看服务状态**: ```bash systemctl status zabbix-server ``` 若显示 `failed` 或 `inactive`,需进一步检查日志。 - **查看日志定位错误**: ```bash journalctl -u zabbix-server | tail -n 50 # 查看最近50条日志 grep -i error /var/log/zabbix/zabbix_server.log # 过滤错误信息 ``` 常见错误: - 数据库连接失败(如 `Can't connect to MySQL server`)[^2] - 配置文件语法错误(如 `Invalid configuration parameter`) --- #### 2. **验证配置文件** - **关键配置项检查**(`/etc/zabbix/zabbix_server.conf`): ```ini DBHost=127.0.0.1 # 数据库地址(必须正确) DBPort=3306 # 数据库端口(默认3306) DBName=zabbix # 数据库名(需与实际一致) DBUser=zabbix # 数据库用户(需有权限) DBPassword=YourPassword # 密码(需正确) ListenPort=10051 # 确保未被修改 ``` **修复后重启服务**: ```bash systemctl restart zabbix-server ``` --- #### 3. **检查端口占用** - **确认端口是否被占用**: ```bash netstat -tulnp | grep 10051 ``` 若被其他进程占用: - 停止占用进程:`kill -9 <PID>` - 或修改 Zabbix 监听端口(需同步调整 agent 配置)[^5] --- #### 4. **数据库连接测试** - **手动测试数据库连通性**: ```bash mysql -h<DBHost> -P<DBPort> -u<DBUser> -p<DBPassword> -e "SHOW DATABASES;" ``` 若连接失败: - 检查数据库服务状态:`systemctl status mariadb`(或 MySQL- 验证用户权限:`GRANT ALL ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'password';` - 防火墙放行数据库端口(默认 3306)[^2] --- #### 5. **文件权限与 SELinux** - **修复文件权限**: ```bash chown -R zabbix:zabbix /var/run/zabbix/ # PID 目录 chown -R zabbix:zabbix /var/log/zabbix/ # 日志目录 ``` - **临时禁用 SELinux 测试**: ```bash setenforce 0 # 临时关闭 systemctl restart zabbix-server ``` 若服务恢复,需配置 SELinux 策略: ```bash semanage port -a -t zabbix_port_t -p tcp 10051 ``` --- #### 6. **验证服务监听** - **检查服务是否监听端口**: ```bash ss -lntp | grep 10051 zabbix_get -s 127.0.0.1 -p 10051 -k "agent.ping" # 应返回 1 [^1] ``` 若返回失败,检查: - 防火墙是否放行 10051: ```bash firewall-cmd --add-port=10051/tcp --permanent firewall-cmd --reload ``` --- #### 典型解决方案总结 | **问题原因** | **解决方案** | |----------------------|------------------------------------------| | 数据库配置错误 | 修正 `DBHost`, `DBPort` 等参数 [^2] | | 端口被占用 | 停止占用进程或修改 `ListenPort` [^5] | | 文件权限不足 | `chown -R zabbix:zabbix` 相关目录 | | SELinux 限制 | 放行端口或临时禁用 SELinux | | 防火墙拦截 | 开放 10051/TCP 端口 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值