MariaDB主从复制报'repl_user'@'10.0.0.5'访问被拒绝,异常IP来源排查
10.0.0.5 IP来源说明
报错信息里的repl_user@'10.0.0.5'是主库侧识别到的客户端连接源地址,出现非预期IP的常见原因如下:
- 从库侧网络路由/NAT规则变更:从库访问主库的出站流量被SNAT转换为10.0.0.5,主库收到的连接源地址为NAT转换后的地址
- 主库侧反向DNS解析异常:MariaDB默认开启客户端IP反向解析,如果主库的hosts文件、DNS服务器存在错误的PTR记录,会将从库实际IP反向解析为10.0.0.5
- 从库网卡配置变更:从库新增了10.0.0.5网段的虚拟网卡/物理网卡,访问主库时自动选择该地址作为源IP
- 中间层地址转换:主从之间新增了VPN、数据库代理、端口转发等中间节点,流量经过时源IP被替换为中间节点的10.0.0.5地址
排查步骤
- 确认从库访问主库的实际源IP:在从库执行抓包命令
tcpdump -i any port 3306 and host 192.168.1.11,查看发往主库的数据包源IP。如果源IP确实为10.0.0.5,继续排查从库网络:- 执行
ip addr查看所有网卡绑定的IP地址 - 执行
ip route get 192.168.1.11查看访问主库的路由规则,确认默认源IP - 执行
iptables -t nat -nL查看是否存在修改出网源IP的SNAT规则
- 执行
- 如果抓包显示源IP为正常的192.168网段地址,排查主库反向解析配置:
- 在主库执行
host <从库实际IP>查看反向解析结果 - 检查主库
/etc/hosts文件是否存在错误的IP映射记录
- 在主库执行
- 排查中间层设备:确认集群是否新增了VPN、网关、数据库代理等服务,检查主库3306端口是否配置了端口转发规则,确认流量路径是否被篡改
- 验证主库用户权限:执行
SELECT user,host,password FROM mysql.user WHERE user='repl_user' ORDER BY LENGTH(host) DESC;确认是否存在host更精确的同名repl_user用户(如repl_user@'192.168.%'),MySQL用户匹配优先级为更精确的host优先,若存在该类用户且密码配置错误也会触发权限拒绝。
解决方法
- 若为NAT/源IP变更问题:恢复从库原有路由规则,确保访问主库的源IP为之前的合法地址;若10.0.0.5为合法的NAT出口IP,确认主库防火墙、SELinux未拦截该地址访问即可,由于repl_user的host配置为
%,无需额外授权。 - 若为主库反向解析问题:在主库配置文件
my.cnf的[mysqld]段添加skip-name-resolve参数,重启MariaDB服务即可关闭反向解析,避免解析错误导致的异常。 - 若为中间层地址转换问题:调整中间层转发规则,保留从库源IP,或者将中间层IP加入主库访问白名单即可。
- 若为同名用户优先级问题:删除host更精确的错误repl_user用户,或者修改该用户的密码为正确的
repl123即可。
内容的提问来源于stack exchange,提问作者Chang Zhao
相关产品推荐
相关产品推荐

