MySQL/MariaDB数据库安装、安全配置与远程连接

MySQL/MariaDB数据库安装、安全配置与远程连接

为您的应用打下坚实的数据基础

无论是运行动态网站(如WordPress)、开发应用程序,还是存储业务数据,数据库都是现代服务器架构中不可或缺的核心组件。MySQL及其广受欢迎的社区分支MariaDB,是目前最流行的开源关系型数据库管理系统。

本教程将指导您如何在常见的Linux服务器(以 Ubuntu 22.04 LTS 为主要示例,并会提及CentOS/RHEL系发行版的差异)上完成MySQL或MariaDB的安装,执行关键的初始安全配置,并介绍如何在必要时安全地启用远程连接。

准备工作:

  • 拥有一台可以通过SSH访问的Linux服务器。
  • 拥有sudo权限的非root用户账号。
  • 熟悉基本的Linux命令行操作。

(注:MariaDB是MySQL的一个流行分支,由MySQL的原始开发者创建,旨在保持开源。在许多Linux发行版中,MariaDB现在是默认提供的“mysql”兼容数据库。本教程命令将优先使用MariaDB,并指出MySQL的可能差异。功能和大部分命令是高度兼容的。)

Step 1: 安装 MySQL / MariaDB

首先,更新您的服务器软件包列表,确保获取最新的软件版本信息。

  • Ubuntu/Debian: Bashsudo apt update sudo apt upgrade -y
  • CentOS/RHEL/Fedora: Bashsudo dnf update -y

接下来,安装数据库服务器。推荐安装MariaDB,因为它通常在发行版仓库中更易获取且兼容性良好。

  • Ubuntu/Debian (安装MariaDB): Bashsudo apt install mariadb-server -y (如果确实需要Oracle的MySQL,可运行 sudo apt install mysql-server -y)
  • CentOS/RHEL/Fedora (安装MariaDB): Bashsudo dnf install mariadb-server -y (安装Oracle的MySQL可能需要先添加官方Yum仓库,步骤相对复杂)

安装完成后,启动数据库服务并设置为开机自启:

Bash

sudo systemctl start mariadb # 或 mysqld (取决于安装的是哪个)
sudo systemctl enable mariadb # 或 mysqld

验证服务是否正在运行:

Bash

sudo systemctl status mariadb # 或 mysqld

您应该能看到 active (running) 的状态。同时可以通过以下命令查看安装的版本:

Bash

mariadb --version # 或 mysql --version

Step 2: 运行安全配置脚本

新安装的MySQL/MariaDB有一些默认设置可能带来安全风险。官方提供了一个交互式脚本 mysql_secure_installation 来帮助我们进行基础的安全加固。

运行该脚本:

Bash

sudo mysql_secure_installation

脚本会引导您完成以下步骤(强烈建议按照推荐选项操作):

  1. Enter current password for root (enter for none): 刚安装通常没有密码,直接按Enter键。
  2. Switch to unix_socket authentication? [Y/n]: 建议选 Y (或按Enter默认)。这允许您在服务器本地使用sudo mysql直接登录,更方便安全。如果选N,则需要为root设置密码。
  3. Change the root password? [Y/n]: 如果上一步选择了Y (unix_socket),这里通常会问是否继续使用socket。如果上一步选N或需要为root设置密码,这里选Y并设置一个强密码
  4. Remove anonymous users? [Y/n]: Y。匿名用户带来安全风险。
  5. Disallow root login remotely? [Y/n]: Y。**极其重要!**禁止root用户从远程登录,可以极大降低被暴力破解的风险。
  6. Remove test database and access to it? [Y/n]: Y。测试数据库通常不需要在生产环境保留。
  7. Reload privilege tables now? [Y/n]: Y。使以上更改立即生效。

完成这些步骤后,您的数据库基础安全性将得到显著提升。

Step 3: (可选) 配置远程连接

警告: 默认情况下,数据库服务器通常只允许来自本机的连接(localhost/127.0.0.1),这是最安全的设置。只有在确实需要从其他服务器或特定IP地址直接访问数据库时,才应考虑开启远程连接。 开启远程连接会增加数据库暴露在网络攻击下的风险。如果可能,优先考虑使用SSH隧道等更安全的方式进行远程访问。

如果您确认需要开启远程连接,请按以下步骤操作:

  1. 修改绑定地址 (Bind Address):
    • 找到数据库的配置文件。路径可能因系统和数据库类型而异:
      • Ubuntu/Debian + MariaDB: 通常在 /etc/mysql/mariadb.conf.d/50-server.cnf
      • CentOS/RHEL + MariaDB: 通常在 /etc/my.cnf.d/mariadb-server.cnf
      • MySQL: 可能是 /etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf
    • 使用文本编辑器(如nanovim)打开该文件(需要sudo权限): Bashsudo nano /etc/mysql/mariadb.conf.d/50-server.cnf # 示例路径
    • 找到 [mysqld][server] 配置段下的 bind-address 指令。
    • 默认值通常是 127.0.0.1。将其修改为:
      • 0.0.0.0:允许来自任何网络接口的连接(注意:便利但风险最高!)。
      • <您的服务器公网或内网IP>:只允许通过指定IP地址的接口进行连接(更安全)。
    • 保存并关闭文件。
  2. 配置防火墙:
    • 您需要允许外部访问数据库端口(默认为 3306)。
    • 强烈建议:只允许来自特定可信IP地址的访问!
    • 使用 UFW (Ubuntu 默认): Bash# 仅允许特定IP访问 (推荐!) sudo ufw allow from <信任的IP地址> to any port 3306 proto tcp # 或者,允许所有IP访问 (风险较高!) # sudo ufw allow 3306/tcp sudo ufw enable # 如果防火墙未启用 sudo ufw reload # 应用规则
    • 使用 firewalld (CentOS/RHEL 默认): Bash# 仅允许特定IP访问 (推荐!) sudo firewall-cmd --permanent --new-zone=mysqlzone # 创建区域(仅首次) sudo firewall-cmd --permanent --zone=mysqlzone --add-source=<信任的IP地址>/32 # 添加信任IP (可多条) sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload # 或者,允许所有IP访问 (风险较高!) # sudo firewall-cmd --permanent --add-port=3306/tcp # sudo firewall-cmd --reload
  3. 创建并授权远程用户:
    • 永远不要使用root用户进行远程连接! 为远程访问创建一个专用的、权限受限的用户。
    • 登录数据库(本地使用sudo mysqlmysql -u root -p输入密码): SQL-- 创建用户,'%'表示任意主机,建议替换为具体的信任IP地址 CREATE USER 'remote_user'@'<信任的IP地址>' IDENTIFIED BY '设置一个非常强的密码'; -- 例如: CREATE USER 'dev_user'@'192.168.1.100' IDENTIFIED BY 'P@sswOrd123!'; -- 授予用户对特定数据库的权限 (替换your_database为实际库名) -- 仅授予必要权限,避免使用 ALL PRIVILEGES GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'remote_user'@'<信任的IP地址>'; -- 如果需要所有权限 (不推荐用于应用账户): -- GRANT ALL PRIVILEGES ON your_database.* TO 'remote_user'@'<信任的IP地址>'; -- 刷新权限使更改生效 FLUSH PRIVILEGES; -- 退出数据库 EXIT;
  4. 重启数据库服务: Bashsudo systemctl restart mariadb # 或 mysqld

现在,您应该能从指定的 <信任的IP地址> 使用 remote_user 和设置的密码连接到数据库了。例如,在远程机器上使用MySQL客户端:

Bash

mysql -u remote_user -h <您的服务器IP地址> -p

Step 4: 基本测试与使用

登录到数据库后,可以执行一些基本命令来验证:

SQL

SHOW DATABASES; -- 查看所有数据库
CREATE DATABASE IF NOT EXISTS myapp_db; -- 创建一个新数据库(如果不存在)
USE myapp_db; -- 选择使用这个数据库
SHOW TABLES; -- 查看当前数据库中的表(现在应该是空的)
EXIT; -- 退出

安全最佳实践总结

  • 始终运行 mysql_secure_installation
  • 为所有数据库用户设置强密码。
  • 禁止root用户远程登录
  • 最小化远程访问,优先使用SSH隧道。
  • 如果必须远程连接,务必配置防火墙,只允许可信IP访问
  • 为应用程序创建专用数据库用户,并授予最小必需权限 (Least Privilege)
  • 定期备份数据库。
  • 保持数据库软件更新到最新稳定版。

结论:安全第一,按需配置

恭喜!您现在已经在Linux服务器上成功安装并进行了基础安全配置的MySQL/MariaDB数据库。我们还探讨了如何按需、安全地配置远程连接。请牢记,数据库安全至关重要,务必遵循最佳实践来保护您的数据。

实操指南软件分享

构建你自己的Web服务监控平台:Uptime Kuma从部署到告警配置

2025-3-31 11:21:49

软件分享

搭建自己的代码仓库:GitLab/Gitea服务器安装与配置教程

2025-4-9 11:55:42

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧