当前位置: 首页 > news >正文

无法远程连接 MySQL

如果经过多次配置仍无法远程连接 MySQL,可能是某些细节被忽略了,我们可以按以下步骤逐一排查,确保每个环节都正确:

一、确认 MySQL 核心配置(最关键)

  1. 明确 MySQL 实际加载的配置文件MySQL 启动时会按优先级加载多个配置文件,可能存在 “你修改的文件未被实际加载” 的情况。执行以下命令查看 MySQL 正在使用的配置文件路径:

    bash

    mysql --help | grep "Default options" -A 10
    

    输出会显示类似:/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf优先修改排在前面的文件(通常是/etc/my.cnf)。

  2. 强制修改监听地址打开 MySQL 实际加载的主配置文件(如/etc/my.cnf),在[mysqld]部分明确添加或修改

    ini

    [mysqld]
    bind-address = 0.0.0.0  # 必须是0.0.0.0,确保监听所有网卡
    port = 3306             # 明确指定端口(默认3306,若修改需同步开放防火墙)
    skip-name-resolve       # 可选,跳过DNS解析,避免因解析问题导致连接失败
    

    修改后必须重启 MySQL

    bash

    sudo systemctl restart mysqld
    
  3. 验证 MySQL 监听状态确认 MySQL 是否真的在监听0.0.0.0:3306

    bash

    netstat -tulnp | grep mysqld
    

    若输出包含 tcp6 0 0 :::3306 :::* LISTEN 1234/mysqld,说明监听正常(:::3306 包含了对 IPv4 的0.0.0.0:3306支持);若只显示 127.0.0.1:3306,则配置未生效,需重新检查配置文件并重启。

二、用户权限与认证插件(易踩坑点)

  1. 确保用户权限正确且生效登录 MySQL,执行以下命令,确认远程用户(如root@%)的权限和主机限制:

    sql

    SELECT user, host, plugin FROM mysql.user WHERE user = '你的远程用户名';
    
    • host 必须为 %(允许所有 IP)或具体客户端 IP。
    • plugin 若为 caching_sha2_password:部分旧版本 Navicat 不支持,需改为兼容的mysql_native_password

      sql

      ALTER USER '你的远程用户名'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
      FLUSH PRIVILEGES;  # 必须执行,刷新权限
      
  2. 测试本地登录是否正常在 openEuler 服务器上,用远程用户本地登录,排除密码错误:

    bash

    mysql -u 你的远程用户名 -p -h 127.0.0.1  # 必须加 -h 127.0.0.1,模拟远程连接逻辑
    

    若本地登录失败,说明用户创建或密码错误,重新创建用户:

    sql

    DROP USER IF EXISTS '你的远程用户名'@'%';  # 先删除旧用户
    CREATE USER '你的远程用户名'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
    GRANT ALL PRIVILEGES ON *.* TO '你的远程用户名'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

三、防火墙与 SELinux(必查)

  1. 防火墙必须开放 3306 端口执行以下命令,确保 3306 端口已永久开放并生效:

    bash

    # 查看已开放的端口
    sudo firewall-cmd --list-ports --permanent
    # 若没有3306/tcp,添加并重启防火墙
    sudo firewall-cmd --add-port=3306/tcp --permanent
    sudo firewall-cmd --reload
    # 临时关闭防火墙测试(排除防火墙问题)
    sudo systemctl stop firewalld
    

    关闭防火墙后若能连接,说明是防火墙规则未生效,重新执行开放端口命令即可。

  2. SELinux 限制(openEuler 默认开启)执行以下命令临时关闭 SELinux 测试:

    bash

    sudo setenforce 0  # 临时关闭(宽容模式)
    

    若关闭后能连接,说明 SELinux 拦截了连接,需永久配置:

    bash

    # 安装工具
    sudo dnf install -y policycoreutils-python-utils
    # 允许MySQL使用3306端口
    sudo semanage port -a -t mysqld_port_t -p tcp 3306
    # 永久开启SELinux并保持配置
    sudo setenforce 1
    

四、客户端与网络问题

  1. 客户端连接参数绝对不能错

    • 主机:必须是 openEuler 服务器的实际 IP(用ip addr在服务器上查询,确保客户端能 ping 通)。
    • 端口:必须是 3306(或你修改的端口,需与 MySQL 配置和防火墙一致)。
    • 用户名 / 密码:与 MySQL 中创建的远程用户完全一致(注意大小写)。
  2. 用命令行客户端测试,排除 Navicat 问题在客户端机器(Windows 用 CMD,Linux/macOS 用终端)执行:

    bash

    mysql -h 服务器IP -u 远程用户名 -p -P 3306
    
    • 若提示 Access denied:密码错误或用户权限问题。
    • 若提示 Can't connect to MySQL server:网络不通、端口未开放或 MySQL 未监听。
    • 若能登录:说明是 Navicat 的问题(更新 Navicat 或检查其配置,如 SSL 设置)。

总结

按以上步骤逐一排查,重点确认:

  1. MySQL 配置文件正确且监听0.0.0.0:3306
  2. 远程用户权限正确、认证插件兼容;
  3. 防火墙和 SELinux 未拦截 3306 端口;
  4. 客户端连接参数与服务器完全匹配。

如果某一步测试通过(如关闭防火墙后连接成功),则问题就出在该环节,针对性解决即可。

http://www.dtcms.com/a/507212.html

相关文章:

  • 域名seo站长工具中文网址大全2345
  • 终身免费vps上海搜索优化推广
  • WebDAV 服务搭建指南
  • 射击游戏-辅助瞄准
  • 董付国老师Python小屋编程题答案171-180
  • 15、Python函数-函数传参
  • 手机自助网站建设seo公司发展前景
  • kafka-3.3.1
  • 惠洋科技原厂直销H6201L:150V降压芯片 支持200V120V100V降压12V5V3.3V5A大电流仪表盘供电IC方案 低功耗 高性能
  • Python趣味算法:出售金鱼问题:用Python逆向思维破解数学谜题
  • Centos环境基于Nginx配置https
  • VMware Ubuntu 虚拟机网络故障分析报告
  • PostgreSQL PostGIS安装与配置,现有数据库启用PostGIS扩展
  • centos中安装redis
  • 【终极面试集锦】如何设计微服务熔断体系?
  • 华为多级m-lag简单配置案例
  • UE4_UE5 的快速下载安装教学 (UE产品展示程序实例教程 1)
  • 淄博哪家公司做网站最好龙岗微信网站制作
  • K8S(十七)—— Kubernetes集群可视化工具Kuboard部署与实践指南
  • 74-基于Python的蜜雪冰城门店数据可视化分析系统
  • 正点原子RK3568学习日志11-申请字符设备号
  • k8s device plugin
  • 征二级网站建设意见 通知室内装修设计企业
  • 【Maven】Maven设置国内源
  • 软件设计师知识点总结:程序设计语言基础
  • 让Pycharm的Terminal(终端)进入创建好的虚拟环境
  • [css] 图片阴影 filter: drop-shadow
  • 第三章深度学习---核心库TensorFlow 和 PyTorch 实操指南(三)
  • BugKu Web渗透之 cookiesWEB
  • 【研究生随笔】Pytorch中的线性代数(微分)