Ubuntu 服务器配置 MySQL 远程连接及排错指南

青禾
青禾
发布时间:2026-10-15| 6人浏览过
原创

本文详细介绍在 Ubuntu 系统上配置 MySQL 数据库远程连接的完整流程。核心步骤包括创建支持远程登录的用户、修改 my.cnf 解除本地地址绑定、清理可能导致认证错误的匿名账户,以及排查常见的端口不一致或防火墙拒绝连接问题。

结果与目标

成功从其他机器(A)通过命令行或客户端工具连接并管理安装在本机(B,Ubuntu)上的 MySQL 数据库。实现这一目标需要完成三个关键动作:创建远程用户、开放网络监听端口,并确保通信端口一致且未被拦截。

准备条件

  1. A 机器:发起连接操作的客户端机器,已安装 MySQL 客户端或相关图形化工具。
  2. B 机器:运行 Ubuntu 系统的服务器,安装了 MySQL 服务端,拥有 root 管理员权限。
  3. 网络连通性:A 与 B 之间网络通畅,能够 Ping 通对方 IP。
  4. 默认端口知识:MySQL 默认监听 TCP 3306 端口。

真实操作顺序

第 1 步:在 MySQL 中创建专门的远程连接用户

目的:默认情况下,MySQL 的 root 账号仅允许本地 (localhost) 连接。为了安全起见,应创建专门的用户并赋予其远程访问权限。

入口:通过终端登录到 B 机器(Ubuntu),进入 MySQL 交互界面。

操作方法:推荐使用 GRANT 语句直接创建并授权,这比手动修改数据库表更规范。例如,创建用户 wow,密码为 mypassword,并允许从任意主机(%)连接:

CREATE USER 'wow'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'wow'@'%';
FLUSH PRIVILEGES;

如果只想限制特定 IP 访问,可将 % 替换为具体 IP 地址,如 'wow'@'192.168.83.56'。

第 2 步:修改配置文件以监听非本地 IP

目的:MySQL 安装后通常只监听本地回环地址 (127.0.0.1),需修改配置使其接收来自局域网或其他网络的请求。

入口:编辑 B 机器的 MySQL 配置文件 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf。

操作方法:使用编辑器打开文件,找到 bind-address 字段:

风险提醒:操作前建议备份原始配置文件,或使用 sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak。

sudo vim /etc/mysql/my.cnf

将以下内容注释掉或删除,或者将其改为 0.0.0.0(视具体发行版而定,通常注释即可):

# bind-address = 127.0.0.1

重要参数:同时检查是否有 skip_networking 选项,如果有,必须注释掉它,否则将完全禁止 TCP/IP 网络连接。

可观察状态:修改完成后,重启 MySQL 服务使配置生效:

sudo systemctl restart mysql

可通过 netstat -tulnp | grep 3306 查看监听地址是否变为 0.0.0.0 或 ::。

第 3 步:排除匿名账户导致的认证干扰

目的:有时新建用户无法登录,甚至在本机也报错(Access denied),可能是因为系统中存在空的匿名用户优先于新建用户。

操作方法:如果第二步后仍报 ERROR 1045 (28000) 且确认密码正确,检查并删除匿名账户:

mysql -u root -p
USE mysql;
DELETE FROM user WHERE User='';
FLUSH PRIVILEGES;
QUIT;

注意:执行完删除操作后需重新加载权限(FLUSH PRIVILEGES)。

第 4 步:验证端口一致性并尝试连接

目的:确保客户端指定的端口与服务端监听的端口一致,避免因端口混淆导致连接失败。

操作方法:在 A 机器上使用命令连接 B 机器。假设 B 的 IP 为 192.168.11.12,用户为 wow,端口为默认的 3306:

mysql -h 192.168.11.12 -u wow -P 3306 -p

如果提示输入密码,请输入设定的 mypassword。

完成判断

如果在 A 机器执行上述连接命令后,不再报错并进入了 MySQL 交互命令行界面(显示 mysql>),即表示远程连接配置成功。此时可以执行简单的查询如 SHOW DATABASES; 来确认权限是否正常。

原文有依据的排错

如果连接过程中遇到问题,请按照以下顺序排查:

  • 错误:ERROR 2003 (HY000): Can't connect to MySQL server...
    • 原因:通常是服务器防火墙拦截了 3306 端口,或者 my.cnf 中的 bind-address 未正确修改。
    • 操作:在 Ubuntu 上,若使用了 UFW 防火墙,需执行 sudo ufw allow 3306/tcp 放行端口。如果使用 iptables,需添加相应的 ACCEPT 规则。同时再次确认 bind-address 配置是否已注释。
  • 错误:Connection refused
    • 原因:端口错误或服务器未启动监听。
    • 操作:在 B 机器上使用 netstat -tlnp 检查 mysqld 进程是否在监听 3306 端口。如果显示监听的是 127.0.0.1:3306 而非 0.0.0.0:3306,说明配置文件修改未生效或未正确注释 bind-address。
  • 错误:Access denied for user...
    • 原因:用户名、密码错误,或者 host 权限不匹配,或者存在匿名账户干扰。
    • 操作:确认创建的 user 表中该用户的 host 字段是否为 '%' 或对应的客户端 IP。参考上文第 3 步清除空用户。

简要总结

配置 MySQL 远程访问的核心在于“人”和“门”的设置。“人”指的是在数据库中创建具有远程权限(host 不为 localhost)的用户;“门”指的是在网络层面允许外部 IP 访问指定端口,这需要通过修改 my.cnf 解除本地绑定并配置防火墙。此外,保持客户端和服务端的端口号一致也是连接成功的必要条件。

以上就是 Ubuntu 服务器配置 MySQL 远程连接及排错的详细内容,更多关于 MySQL 优化与安全的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。