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

Linux MySQL远程访问配置教程

配置MySQL远程访问需三步: ,1. **授权用户**: GRANT ALL ON *.* TO '用户名'@'远程IP' IDENTIFIED BY '密码' WITH GRANT OPTION; ,2. **修改配置**:编辑 my.cnf,将 bind-address = 127.0.0.1改为 0.0.0.0 ,3. **开放端口**:防火墙允许3306端口(如 sudo ufw allow 3306) ,最后重启MySQL服务生效。

远程连接Linux MySQL的完整指南

核心原理与前提条件

MySQL默认仅允许本地连接(127.0.0.1),要实现远程访问,需完成三个关键配置:

  1. 用户授权:创建远程访问专用账户
  2. 配置文件修改:解除本地绑定限制
  3. 防火墙放行:开放3306端口

必备条件

  • Linux服务器root权限
  • MySQL已安装(建议5.7+或8.0+版本)
  • 客户端与服务器网络互通(可通过ping [服务器IP]验证)

分步操作指南

步骤1:登录MySQL创建远程用户

mysql -u root -p  # 使用root登录
# 创建新用户并授权(推荐)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 或修改root远程权限(生产环境不推荐)
UPDATE mysql.user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;

步骤2:修改MySQL配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf  # Ubuntu/Debian
# 或
vim /etc/my.cnf  # CentOS/RHEL

找到并修改以下参数:

Linux MySQL远程访问配置教程  第1张

bind-address = 0.0.0.0  # 默认127.0.0.1
skip-networking = OFF    # 确保未启用

保存后重启服务:

systemctl restart mysql  # 或 mysqld

步骤3:配置防火墙

Firewalld(CentOS/RHEL)

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

UFW(Ubuntu/Debian)

ufw allow 3306/tcp
ufw reload

IPTables(通用)

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save  # 或使用iptables-persistent

连接测试与排错

客户端连接命令

mysql -h [服务器IP] -u remote_user -p

常见错误解决方案:

错误代码 原因 修复方法
ERROR 1130 用户未授权 检查GRANT语句中的IP范围
ERROR 2003 端口不通 检查防火墙规则sudo iptables -L -n
ERROR 1045 密码错误 重置密码ALTER USER 'user'@'%' IDENTIFIED BY 'new_pwd';
ERROR 1524 认证插件冲突 执行ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';

安全加固建议

  1. 最小权限原则
    GRANT SELECT,INSERT ON dbname.* TO 'user'@'192.168.1.%';  # 限制IP段和操作权限
  2. 禁用root远程登录
    DELETE FROM mysql.user WHERE user='root' AND host='%';
  3. 启用SSL加密传输
    # my.cnf增加
    require_secure_transport = ON
    ssl-ca = /etc/mysql/ca.pem
  4. 定期审计用户
    SELECT user, host FROM mysql.user;  # 检查异常账户

高级配置场景

场景1:通过SSH隧道连接

ssh -L 3306:localhost:3306 user@server_ip  # 端口转发
# 客户端连接127.0.0.1:3306

场景2:Docker环境配置

docker run -d 
  -p 3306:3306 
  -e MYSQL_ROOT_PASSWORD=secret 
  -e MYSQL_REMOTE_USER=remote 
  mysql:8.0 
  --bind-address=0.0.0.0

验证操作是否成功

SHOW VARIABLES LIKE 'bind_address';  # 应返回0.0.0.0
SELECT user, host FROM mysql.user;   # 确认远程用户存在

重要提示:完成配置后,立即执行mysql_secure_installation强化安全设置,并定期备份/etc/my.cnf和用户权限表。


引用说明

  1. MySQL 8.0官方安全指南 https://dev.mysql.com/doc/refman/8.0/en/security.html
  2. Linux防火墙最佳实践 Red Hat文档 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/securing_networks/
  3. 网络连通性检测工具使用手册 ICMP协议RFC 792
    基于MySQL 8.0.28及Ubuntu 22.04 LTS测试验证,配置前请务必备份关键数据。
0