You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL(MariaDB)复制从库报13 Permission denied但mysql命令可连接求助

解决MySQL主从复制IO线程连接失败(Permission Denied)的问题

从你的描述来看,手动通过SSH隧道的33061端口能正常连接主库,但从库的IO线程却一直报Permission denied,这个矛盾点其实指向了SELinux的进程上下文限制——普通用户(你手动执行mysql客户端的用户)和MySQL服务进程的SELinux权限是不一样的,下面是具体的排查和解决步骤:

1. 快速验证SELinux是否是问题根源

先临时关闭SELinux来测试:

setenforce 0

然后登录从库的MySQL,重启IO线程:

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

等待10秒左右执行SHOW SLAVE STATUS\G,如果Slave_IO_Running变成Yes,那百分百是SELinux在搞鬼。

2. 永久修复SELinux限制

临时关闭只是验证,我们需要给MySQL服务进程添加合法的访问权限,有两种常用方式:

方式一:允许MySQL连接任意端口(简单粗暴)

执行这条命令(需要先安装policycoreutils-python-utils包,比如yum install policycoreutils-python-utils):

setsebool -P mysql_connect_any 1

这个mysql_connect_any布尔值就是用来控制MySQL进程是否能发起出站连接到任意端口的,开启后就不会阻止连接33061这类非标准端口了。

方式二:仅允许MySQL访问33061端口(更安全)

如果你不想开放所有端口,可以把33061添加到SELinux认可的MySQL端口列表里:

semanage port -a -t mysqld_port_t -p tcp 33061

执行完后重启MySQL服务:

systemctl restart mariadb

再启动从库的IO线程就应该能正常连接了。

3. 其他小众排查方向(如果SELinux不是问题)

  • 检查MySQL的systemd配置文件(通常在/usr/lib/systemd/system/mariadb.service或/etc/systemd/system/mariadb.service.d/下),看是否有PrivateNetwork=yes、RestrictNetworkInterfaces这类限制网络访问的参数,这些会阻止MySQL进程访问本地的SSH转发端口。
  • 确认SSH隧道的运行用户:虽然你手动能连,但如果隧道是用特定用户启动的,MySQL进程的用户(通常是mysql)可能没有权限访问?不过这个概率极低,你可以用ps aux | grep ssh查看隧道进程的所有者。

内容的提问来源于stack exchange,提问作者Pedram Behroozi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:17:44