想要让MySQL接受远程连接,其实并不复杂,跟着下面的步骤走就行。整个过程大致分为四个环节:改配置、设密码、建用户、开端口。每一步都不难,但有些细节容易被忽略,下面逐一拆解。

1、修改MySQL配置文件
在Ubuntu系统上,MySQL的配置文件通常藏在 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf,具体路径取决于你安装的版本和发行版。如果不确定,可以用 find / -name "my.cnf" 快速定位。
找到文件后,用你习惯的编辑器打开它——比如 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf。在文件里搜索 bind-address 这一行,默认值通常是 127.0.0.1,表示只允许本机连接。把它改成服务器的实际IP地址,或者直接改成 0.0.0.0,这样任何IP都可以访问。
bind-address = 0.0.0.0
当然,改成 0.0.0.0 意味着暴露了入口,安全风险也随之增加。所以生产环境一定要结合白名单和防火墙来限制来源IP,别图省事。
2、设置MySQL中的root用户密码
刚装完MySQL时,root用户很可能没有密码(或者密码为空)。先以管理员身份登录MySQL:
sudo mysql -u root
回车进入MySQL命令行。接着,修改本地登录密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
如果打算允许root用户远程连接,还需要同时更新 root@'%' 的密码:
ALTER USER 'root'@'%' IDENTIFIED BY 'new_password';
需要注意的是,MySQL 8.0版本之后,默认的身份认证插件变成了 caching_sha2_password,一些旧的客户端可能无法直接连上。如果遇到连接报错,可以将root的认证方式改回 mysql_native_password:
ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'new_password';
改完密码后,执行 exit; 退出,再用新密码重新登录测试一下:sudo mysql -u root -p,确保一切正常。
3、创建MySQL用户并授权
直接用root远程不是好习惯,更推荐为远程连接单独创建用户。比如创建一个叫 remoteuser 的用户,赋予它访问 mydatabase 库的所有权限:
CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON mydatabase.* TO 'remoteuser'@'%';
这里的 % 表示允许任何主机连接。如果只想让某个固定IP(比如公司出口IP)能连,就把 % 换成具体的IP地址,比如 '192.168.1.100'。授权完成后,别忘了执行 FLUSH PRIVILEGES; 刷新权限表。
4、确保服务器端口开放
MySQL默认监听3306端口。如果服务器开启了防火墙(比如 ufw 或 iptables),需要显式放行这个端口。以Ubuntu的ufw为例:
sudo ufw allow 3306/tcp
如果是云服务器,还要到云控制台的安全组/防火墙规则中添加入站规则,允许TCP 3306端口的访问。否则配置改得再完美,连都连不上。
总结
以上几步走完,MySQL远程连接基本就能跑通了。不过话说回来,远程直连MySQL始终存在风险,尤其是暴露在公网上的情况。生产环境建议通过SSH隧道、翻跟斗或袋里来间接访问,而不是直接把3306端口开给全世界。安全从来不是一次配置就能搞定的,需要持续关注和加固。
