新装CentOS系统下如何一步步配置MySQL远程连接?

安装与基础配置

在 CentOS 7 或 8 系统中,官方仓库默认提供的是 MariaDB,它是 MySQL 的一个分支,与 MySQL 在绝大多数操作上保持高度兼容,我们以 MariaDB 为例进行说明。

新装CentOS系统下如何一步步配置MySQL远程连接?

通过 yumdnf 包管理器安装 MariaDB 服务器端:

sudo yum install mariadb-server

安装完成后,启动服务并设置其开机自启,这是确保数据库持续可用的关键步骤:

sudo systemctl start mariadb
sudo systemctl enable mariadb

安全初始化设置

新安装的 MySQL/MariaDB 存在诸多安全隐患,例如默认的空 root 密码、匿名用户等,官方提供了一个安全脚本 mysql_secure_installation 来引导我们完成基础的安全加固。

执行以下命令:

sudo mysql_secure_installation

脚本会通过一系列交互式问题来引导你:

  1. 设置 root 密码:为数据库管理员 root 用户设置一个强密码。
  2. 移除匿名用户:删除无需密码即可登录的匿名账户,增强安全性。
  3. 禁止 root 远程登录:默认情况下,root 用户仅允许从服务器本机(localhost)登录,禁止其远程登录是一个重要的安全实践,可以防止对管理员账户的暴力破解。
  4. 移除测试数据库:删除默认创建的 test 数据库,该数据库对任何人开放,存在安全风险。
  5. 重新加载权限表:使以上所有修改立即生效。

完成这些步骤后,你的数据库实例就有了一个坚实的安全基础。

配置本地连接

本地连接是数据库管理最直接的方式,在服务器上,你可以使用以下命令登录数据库:

mysql -u root -p
  • -u root:指定以 root 用户身份登录。
  • -p:提示输入密码,出于安全考虑,不建议直接在命令行中跟写密码。

输入在安全初始化阶段设置的密码后,你将成功进入 MySQL 命令行界面,提示符变为 MariaDB [(none)]>,此时即可执行 SQL 语句。

新装CentOS系统下如何一步步配置MySQL远程连接?

配置远程连接

允许远程连接是配置中最复杂也最关键的一环,涉及防火墙、MySQL 用户权限和 MySQL 服务本身监听地址三个层面。

配置防火墙

CentOS 默认使用 firewalld 作为防火墙管理工具,MySQL 默认监听 3306 端口,你需要开放此端口以允许外部流量进入。

# 永久开放 3306/tcp 端口
sudo firewall-cmd --permanent --add-port=3306/tcp
# 重新加载防火墙规则使配置生效
sudo firewall-cmd --reload
# 查看已开放的端口以确认
sudo firewall-cmd --list-ports

创建并授权远程用户

出于安全考虑,不应直接使用 root 用户进行远程连接,最佳实践是创建一个专用的数据库用户,并仅授予其必要的权限,同时限制其可连接的主机。

登录 MySQL 后,执行以下 SQL 命令:

-- 创建一个名为 'app_user' 的新用户,密码为 'StrongPassword123!'
-- '%' 表示该用户可以从任意 IP 地址连接,你也可以指定特定IP,如 '192.168.1.100'
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';
-- 授予该用户在 'my_app_db' 数据库上的所有权限
GRANT ALL PRIVILEGES ON my_app_db.* TO 'app_user'@'%';
-- 刷新权限,使授权立即生效
FLUSH PRIVILEGES;

修改 MySQL 监听地址

默认情况下,MySQL/MariaDB 仅监听 0.0.1(localhost),这意味着它只接受来自本机的连接请求,要允许远程连接,需要修改其配置文件,让它监听服务器的所有网络接口。

配置文件通常位于 /etc/my.cnf/etc/my.cnf.d/mariadb-server.cnf,使用编辑器打开文件:

sudo vi /etc/my.cnf.d/mariadb-server.cnf

[mysqld][mariadb] 节点下,找到 bind-address 行,将其修改为:

# 将 127.0.0.1 修改为 0.0.0.0,表示监听所有IP地址
bind-address = 0.0.0.0

安全提示:将 bind-address 设置为 0.0.0 会使数据库服务暴露在所有网络接口上,务必确保你已经配置了强大的防火墙规则和使用了复杂的用户密码,否则将带来严重的安全风险。

新装CentOS系统下如何一步步配置MySQL远程连接?

修改完成后,重启 MariaDB 服务使配置生效:

sudo systemctl restart mariadb

至此,远程客户端(如另一台服务器上的应用程序或 MySQL Workbench)就可以使用 app_user 的凭据连接到这台 CentOS 服务器的 MySQL 了。

配置要点小编总结

为了方便查阅,以下表格小编总结了远程连接的核心配置项:

配置项 文件/命令 说明
防火墙端口 firewall-cmd --add-port=3306/tcp 允许外部流量访问 MySQL 的 3306 端口。
远程用户授权 CREATE USER 'user'@'%' 创建允许从任意主机连接的用户。 可替换为特定 IP。
权限授予 GRANT ALL PRIVILEGES ON db.* TO 'user'@'%' 为远程用户分配特定数据库的操作权限。
服务监听地址 bind-address = 0.0.0.0 (在 my.cnf 中) 使 MySQL 服务监听服务器的所有网络接口,而非仅本地。
服务重启 systemctl restart mariadb 使修改后的配置文件(如 bind-address)生效。

相关问答 (FAQs)

问题1:我已经按照步骤设置了 bind-address = 0.0.0.0 并开放了防火墙,为什么还是无法远程连接,提示 “Can’t connect to MySQL server”?

解答:这个问题通常由以下几个原因导致:

  1. SELinux 限制:CentOS 默认启用的 SELinux 安全模块可能会阻止 MariaDB 监听非标准端口,你可以通过以下命令临时关闭 SELinux 进行测试:setenforce 0,如果测试后可以连接,说明是 SELinux 的问题,正确的解决方法是设置 SELinux 策略允许 MariaDB 网络连接:setsebool -P httpd_can_network_connect=1(如果通过 Web 服务器连接)或 setsebool -P mysql_connect_any=1
  2. 用户权限问题:请再次确认你创建的用户是否被授权从你的客户端 IP 地址连接,如果你授权的是 'user'@'192.168.1.%',但你的客户端 IP 是 0.0.5,那么连接会被拒绝,使用 'user'@'%' 可以允许从任何 IP 连接,但安全性较低。
  3. 网络问题:检查客户端和服务器之间是否存在其他网络设备(如路由器、云服务商的安全组)阻止了 3306 端口的通信。

问题2:将 bind-address 设置为 0.0.0 是否安全?有没有更安全的方案?

解答:直接将 bind-address 设置为 0.0.0 并将数据库端口暴露在公网上确实存在较高的安全风险,它会成为黑客扫描和攻击的目标,更安全的方案包括:

  1. 使用 VPN 或 SSH 隧道:这是推荐的最佳实践,客户端先通过 VPN 或 SSH 隧道连接到服务器所在的内网,然后通过内网 IP 地址(如 0.0.10)连接数据库,这样,数据库服务本身无需暴露在公网上,bind-address 可以设置为内网 IP 或保持 0.0.1(通过 SSH 端口转发)。
  2. 严格的防火墙规则:如果必须直接暴露端口,应在防火墙层面做严格的 IP 白名单限制,只允许特定的、可信的 IP 地址访问 3306 端口。sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="YOUR_TRUSTED_IP" port protocol="tcp" port="3306" accept'
  3. 使用云服务商的私有网络:如果你的服务器部署在云上(如阿里云、AWS),请将数据库服务器部署在 VPC(虚拟私有云)或 VNet 内,并确保只有同一网络内的应用服务器才能访问它。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-04 16:41
下一篇 2025-10-04 16:43

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信