
为您的应用打下坚实的数据基础
无论是运行动态网站(如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: Bash
sudo apt update sudo apt upgrade -y
- CentOS/RHEL/Fedora: Bash
sudo dnf update -y
接下来,安装数据库服务器。推荐安装MariaDB,因为它通常在发行版仓库中更易获取且兼容性良好。
- Ubuntu/Debian (安装MariaDB): Bash
sudo apt install mariadb-server -y
(如果确实需要Oracle的MySQL,可运行sudo apt install mysql-server -y
) - CentOS/RHEL/Fedora (安装MariaDB): Bash
sudo 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
脚本会引导您完成以下步骤(强烈建议按照推荐选项操作):
- Enter current password for root (enter for none): 刚安装通常没有密码,直接按Enter键。
- Switch to unix_socket authentication? [Y/n]: 建议选 Y (或按Enter默认)。这允许您在服务器本地使用
sudo mysql
直接登录,更方便安全。如果选N,则需要为root设置密码。 - Change the root password? [Y/n]: 如果上一步选择了Y (unix_socket),这里通常会问是否继续使用socket。如果上一步选N或需要为root设置密码,这里选Y并设置一个强密码。
- Remove anonymous users? [Y/n]: Y。匿名用户带来安全风险。
- Disallow root login remotely? [Y/n]: Y。**极其重要!**禁止root用户从远程登录,可以极大降低被暴力破解的风险。
- Remove test database and access to it? [Y/n]: Y。测试数据库通常不需要在生产环境保留。
- Reload privilege tables now? [Y/n]: Y。使以上更改立即生效。
完成这些步骤后,您的数据库基础安全性将得到显著提升。
Step 3: (可选) 配置远程连接
警告: 默认情况下,数据库服务器通常只允许来自本机的连接(localhost
/127.0.0.1
),这是最安全的设置。只有在确实需要从其他服务器或特定IP地址直接访问数据库时,才应考虑开启远程连接。 开启远程连接会增加数据库暴露在网络攻击下的风险。如果可能,优先考虑使用SSH隧道等更安全的方式进行远程访问。
如果您确认需要开启远程连接,请按以下步骤操作:
- 修改绑定地址 (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
- Ubuntu/Debian + MariaDB: 通常在
- 使用文本编辑器(如
nano
或vim
)打开该文件(需要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地址的接口进行连接(更安全)。
- 保存并关闭文件。
- 找到数据库的配置文件。路径可能因系统和数据库类型而异:
- 配置防火墙:
- 您需要允许外部访问数据库端口(默认为
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
- 您需要允许外部访问数据库端口(默认为
- 创建并授权远程用户:
- 永远不要使用root用户进行远程连接! 为远程访问创建一个专用的、权限受限的用户。
- 登录数据库(本地使用
sudo mysql
或mysql -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;
- 重启数据库服务: Bash
sudo 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数据库。我们还探讨了如何按需、安全地配置远程连接。请牢记,数据库安全至关重要,务必遵循最佳实践来保护您的数据。