mysql默认仅允许本地回环地址连接,若要实现远程连接,需要完成配置调整、用户授权、端口开放三个核心步骤,下面逐一说明具体操作方式。

第一步:修改mysql配置文件
首先需要将mysql的监听地址从本地回环地址改为允许所有地址访问,不同系统下的配置文件路径存在差异:
- Linux系统:配置文件通常为
/etc/mysql/my.cnf或者/etc/my.cnf - Windows系统:配置文件通常为mysql安装目录下的
my.ini
打开配置文件后,找到[mysqld]配置段,修改或添加bind-address参数:
[mysqld] # 原配置可能是 bind-address = 127.0.0.1,修改为如下内容 bind-address = 0.0.0.0 # 若配置段中没有该参数,直接添加即可
修改完成后重启mysql服务使配置生效:
- Linux系统重启命令:
systemctl restart mysql或者service mysql restart - Windows系统重启:在服务管理面板中找到mysql服务,右键选择重启即可
第二步:创建远程访问用户并授权
修改配置后还需要为远程连接创建对应的用户并授予权限,登录到mysql本地客户端后执行以下操作:
方式一:创建新用户并授权
如果需要单独创建远程访问用户,可以执行如下SQL语句:
-- 创建用户,用户名是remote_user,允许所有IP访问,密码是your_password CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password'; -- 授予该用户所有数据库的所有权限,若仅需指定数据库权限可替换为 test_db.* GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
方式二:修改已有用户的访问权限
如果需要让已有的本地用户支持远程访问,可以执行如下语句:
-- 将用户名为local_user的用户的访问范围改为所有IP UPDATE mysql.user SET Host='%' WHERE User='local_user'; -- 刷新权限 FLUSH PRIVILEGES;
其中%代表允许所有IP地址访问,如果仅允许特定IP访问,可以将%替换为对应的IP地址,例如192.168.0.1。
第三步:开放服务器防火墙端口
mysql默认使用3306端口,需要确保服务器防火墙放通该端口的入站流量:
- Linux系统(使用ufw防火墙):执行
ufw allow 3306/tcp命令 - Linux系统(使用firewalld防火墙):执行
firewall-cmd --add-port=3306/tcp --permanent然后firewall-cmd --reload - Windows系统:在防火墙高级设置中添加入站规则,允许3306端口的TCP流量
- 云服务器:还需要在云服务商的安全组中放通3306端口的入站规则
远程连接测试
完成以上配置后,就可以在远程客户端尝试连接,以下是不同客户端的连接方式示例:
命令行连接
# 替换为实际的服务器IP、用户名和密码 mysql -h 服务器IP地址 -u remote_user -p # 输入密码后回车,若成功进入mysql命令行则连接成功
Python代码连接示例
import pymysql
# 建立连接
conn = pymysql.connect(
host='服务器IP地址',
user='remote_user',
password='your_password',
database='test_db', # 可选,指定要连接的数据库
port=3306
)
# 测试连接是否正常
cursor = conn.cursor()
cursor.execute('SELECT VERSION()')
result = cursor.fetchone()
print(f"mysql版本:{result[0]}")
# 关闭连接
cursor.close()
conn.close()
常见错误排查
| 错误提示 | 可能原因 | 解决方法 |
|---|---|---|
| Access denied for user | 用户名或密码错误,或者用户没有远程访问权限 | 检查用户名密码是否正确,确认用户Host字段是否为%或者对应IP |
| Can't connect to MySQL server on | 服务器地址错误、端口未开放、mysql服务未启动 | 检查IP和端口是否正确,确认防火墙和安全组是否放通3306端口,确认mysql服务正常运行 |
| Lost connection to MySQL server | 网络不稳定、连接超时 | 检查网络连接,调整mysql的wait_timeout参数 |
注意:生产环境中不建议将mysql直接开放到公网,也不建议使用%允许所有IP访问,最好仅允许业务服务器的固定IP访问,同时避免使用弱密码,降低数据库安全风险。