MySQL允许远程连接的配置指南

 更新时间:2025年06月09日 11:15:31   作者:超级小忍  
MySQL 是一个广泛使用的开源关系型数据库管理系统,在实际开发中,我们经常需要从本地或外部服务器连接到 MySQL 数据库,下面我们就来看看如何配置 MySQL 以允许远程连接

前言

MySQL 是一个广泛使用的开源关系型数据库管理系统。在实际开发中,我们经常需要从本地或外部服务器连接到 MySQL 数据库。本文将详细介绍如何配置 MySQL 以允许远程连接。

准备工作

服务器为 Linux

已安装 MySQL 的服务器(本博客基于 MySQL 8.0)

拥有管理员权限的用户

确保目标客户端可以通过网络访问 MySQL 服务器的 3306 端口

步骤一:修改 MySQL 配置文件

默认情况下,MySQL 只允许本地连接(localhost)。要开启远程连接,需修改其配置文件。

1. 找到配置文件

Linux 系统一般位于 /etc/mysql/mysql.conf.d/mysqld.cnf

或者使用命令查找:

mysql --help | grep "my.cnf"

2. 修改 bind-address

找到如下行:

bind-address = 127.0.0.1

将其改为:

[mysqld]
bind-address = 0.0.0.0

这表示监听所有 IP 地址上的连接请求。

注意:如果你使用的是云服务器(如阿里云、腾讯云),还需开放对应的安全组规则。

步骤二:创建或授权远程访问用户

1.登录 MySQL:

mysql -u root -p

2. 创建新用户并授权远程访问

CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

‘remote_user’@‘%’ 表示任何 IP 都可以使用 remote_user 登录。

若只允许特定 IP,可替换为 ‘remote_user’@‘192.168.1.100’。

3. (可选)修改已有用户的权限

GRANT ALL PRIVILEGES ON *.* TO 'existing_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

步骤三:重启 MySQL 服务

使配置生效,重启 MySQL 服务:

sudo systemctl restart mysql

安全建议

避免使用 root 用户进行远程连接

使用强密码策略

在生产环境中限制访问 IP 范围

启用 SSL 加密连接(高级用法)

测试远程连接

使用客户端工具(如 Navicat、DBeaver、MySQL Workbench 或命令行)尝试连接:

mysql -h your_server_ip -u remote_user -p

如果提示连接成功,则说明配置已生效!

云服务器注意事项

如果使用的是云服务器,上面操作确保无误之后还是不能远程连接,请务必检查:

安全组是否放行 3306 端口

是否关闭了防火墙(如 UFW、iptables)

是否绑定了公网 IP(某些 VPC 环境需要注意)

方法补充

MySQL 设置允许远程连接完整指南

1.基础配置步骤(以MySQL 8.0为例)

修改MySQL绑定地址

默认情况下MySQL仅监听127.0.0.1,需改为0.0.0.0或服务器公网IP。

打开配置文件:

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

找到 bind-address 并修改:

[mysqld]
bind-address = 0.0.0.0  # 允许所有IP访问(生产环境慎用)
# 或指定特定IP
# bind-address = 192.168.1.100

重启MySQL服务:

sudo systemctl restart mysql    # systemd系统
# 或
sudo service mysql restart      # init.d系统

创建远程访问用户

切勿直接使用root账户远程连接!

登录MySQL控制台:

mysql -u root -p

创建专用远程用户:

-- MySQL 8.0+ 需指定加密插件
CREATE USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPassw0rd!';

-- 授权所有数据库(按需缩小权限)
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

关键参数说明:

  • 'remote_user'@'%':允许从任何IP连接(建议改为具体IP段如'192.168.1.%')
  • mysql_native_password:兼容旧客户端的加密方式(8.0默认使用caching_sha2_password)

配置防火墙

开放MySQL默认端口3306:

# Ubuntu UFW
sudo ufw allow 3306/tcp

# CentOS Firewalld
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

2.高级安全加固方案

限制访问IP

通过MySQL用户权限限制来源IP:

-- 仅允许192.168.1.0/24网段访问
CREATE USER 'secure_user'@'192.168.1.%' IDENTIFIED BY 'Password123!';

使用SSH隧道

更安全的连接方式(无需开放3306端口):

ssh -L 3306:localhost:3306 user@mysql-server.com

客户端连接本地127.0.0.1:3306即可穿透到远程MySQL。

启用SSL加密

检查MySQL SSL支持:

SHOW VARIABLES LIKE '%ssl%';

强制用户使用SSL连接:

ALTER USER 'remote_user'@'%' REQUIRE SSL;

客户端连接时添加参数:

mysql -u remote_user -p -h mysql-host --ssl-mode=REQUIRED

审计与监控

启用查询日志:

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/query.log

使用审计插件(企业版)或第三方工具如Percona Audit Plugin。

3.连接测试与故障排查

测试远程连接

mysql -u remote_user -p -h mysql-server-ip --port=3306

常见错误解决方案

错误提示原因解决方案
ERROR 1130 (HY000)用户权限不足检查GRANT语句和用户主机限制
ERROR 2003 (HY000)端口不通/防火墙拦截使用telnet mysql-host 3306测试
ERROR 1045 (28000)密码错误重置密码:ALTER USER ...
Public Key Retrieval is not allowed加密插件冲突添加连接参数:--ssl-mode=DISABLED

诊断工具

检查端口监听状态:

sudo netstat -tuln | grep 3306

查看实时连接:

SHOW PROCESSLIST;

到此这篇关于MySQL允许远程连接的配置指南的文章就介绍到这了,更多相关MySQL允许远程连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • net start mysql服务名无效的三种解决方法

    net start mysql服务名无效的三种解决方法

    这篇文章主要介绍了net start mysql服务名无效的三种解决方法,通过图文结合的方式讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-08-08
  • mysql获得60天前unix时间思路及代码

    mysql获得60天前unix时间思路及代码

    首先根据now()获得当前时间,使用adddate()方法获得60天前时间,使用unix_timestamp()方法转换时间类型
    2014-08-08
  • php+mysql prepare 与普通查询的性能对比实例讲解

    php+mysql prepare 与普通查询的性能对比实例讲解

    prepare可以解决大访问量的网站给数据库服务器所带来的负载和开销,本文章通过实例向大家介绍预查询prepare与普通查询的性能对比,需要的朋友可以参考一下
    2016-11-11
  • mysql复制中临时表的运用技巧

    mysql复制中临时表的运用技巧

    数据库损坏,也没有备份。刚好二进制日志全部保存完好,幸福了。导入二进制日志到MYSQL
    2012-09-09
  • MySQL自增列解析(Auto_increment)

    MySQL自增列解析(Auto_increment)

    MySQL数据库为列提供了一种自增属性,本文主要介绍了MySQL自增列解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • 基于mysql体系结构的深入解析

    基于mysql体系结构的深入解析

    本篇文章是对mysql体系结构进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL分区表实现按月份归类

    MySQL分区表实现按月份归类

    mysql 单表数据量达到千万、亿级,可以通过分表与表分区提升服务性能。本文主要介绍了MySQL分区表实现按月份归类,感兴趣的可以了解一下
    2021-10-10
  • Ubuntu 18.04.4安装mysql的过程详解 亲测可用

    Ubuntu 18.04.4安装mysql的过程详解 亲测可用

    这篇文章主要介绍了Ubuntu 18.04.4安装mysql-亲测可用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 浅谈MySQL索引为什么是B+树

    浅谈MySQL索引为什么是B+树

    MySQL使用B+树索引来提高数据查询效率,B+树是一种自平衡的多路搜索树,具有平衡性、多路性和高效的查找、插入和删除操作,与B树相比,B+树的所有数据都存储在叶子节点中,并且叶子节点通过链表连接,这使得范围查询更加高效,因此,MySQL选择B+树作为索引的数据结构
    2024-12-12
  • MySQL 的 binlog(Binary Log)日志关闭的方法

    MySQL 的 binlog(Binary Log)日志关闭的方法

    文章介绍了MySQL binlog的作用及关闭方法,binlog用于数据恢复、主从复制和审计,关闭可节省空间,可通过命令检查状态,临时关闭使用SET语句,永久关闭需修改配置文件并重启MySQL,关闭后可手动清理日志文件,感兴趣的朋友跟随小编一起看看吧
    2025-07-07

最新评论