在 Ubuntu 服务器上通过命令行部署数据库,最主流且稳妥的方案是安装 MySQL 或 MariaDB。这两者在技术栈上高度相似,但在国内云环境(如阿里云、腾讯云)中,MySQL 8.0 是目前的生产环境首选。
以下以 MySQL 8.0 为例,梳理从安装到初始化的完整流程。整个过程分为“环境准备”、“安装服务”、“安全初始化”和“远程访问配置”四个阶段。
1. 环境准备与源更新
Ubuntu 的包管理器 apt 默认仓库中的 MySQL 版本可能不是最新的稳定版。为了确保获取官方推荐的版本,建议先更新软件源索引。
sudo apt update
sudo apt upgrade -y
注意:如果你的服务器内存小于 2GB,安装 MySQL 可能会因为交换空间不足导致安装失败或服务启动缓慢。建议在低配机器上增加 Swap 分区,或者考虑使用轻量级的 SQLite/PostgreSQL(视业务需求而定)。
2. 安装 MySQL 服务端
执行安装命令时,系统会提示确认依赖关系,直接按 Y 继续即可。
sudo apt install mysql-server -y
安装完成后,MySQL 服务通常会自动启动。你可以通过以下命令检查服务状态:
systemctl status mysql
如果显示 active (running),说明基础服务已就绪。此时数据库虽然能跑,但安全性极差,属于“裸奔”状态。
3. 安全初始化(关键步骤)
MySQL 5.7+ 和 8.0+ 提供了一个名为 mysql_secure_installation 的安全脚本。这是必须执行的步骤,它会引导你完成 root 密码设置、移除匿名用户、禁止远程 root 登录等核心安全配置。
sudo mysql_secure_installation
执行过程中,你会遇到几个交互式选项,以下是针对生产环境的推荐选择:
-
Validate Password Component(密码验证组件):
- 询问是否启用密码强度验证插件。
- 建议:输入
Y。这能有效防止弱口令,提升安全性。后续会让你选择密码等级(LOW, MEDIUM, STRONG),选2(STRONG) 最为稳妥。
-
Change the root password?(修改 Root 密码):
- 如果你在安装前没设密码,这里需要设置一个强密码。
- 建议:输入
Y,并设置包含大小写字母、数字和特殊字符的复杂密码。
-
Remove anonymous users?(删除匿名用户):
- 建议:输入
Y。匿名用户可以无需密码登录,存在极大风险。
- 建议:输入
-
Disallow root login remotely?(禁止 Root 远程登录):
- 建议:输入
Y。绝对不要允许 root 用户从外部 IP 直接连接数据库。如果需要远程管理,应创建专门的普通用户并赋予权限。
- 建议:输入
-
Remove test database and access to it?(删除测试数据库):
- 建议:输入
Y。测试库在生产环境中毫无用处,反而可能成为攻击入口。
- 建议:输入
-
Reload privilege tables now?(重新加载权限表):
- 建议:输入
Y。使上述更改立即生效。
- 建议:输入
4. 配置远程访问(可选但常见)
默认情况下,MySQL 只监听本地回环地址 (127.0.0.1),这意味着只有服务器本地的应用才能连接它。如果你的应用程序运行在其他机器上,或者你需要从本地电脑连接云服务器上的数据库,则需要修改绑定地址。
编辑 MySQL 配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address 这一行:
# bind-address = 127.0.0.1
将其注释掉,或者修改为 0.0.0.0:
bind-address = 0.0.0.0
保存并退出(在 Nano 编辑器中按 Ctrl+O 保存,Enter 确认,Ctrl+X 退出)。
重要提醒:
仅仅修改配置文件是不够的,你还需要:
- 防火墙放行:确保云服务器的安全组(Security Group)或系统的
ufw放行了 3306 端口。 - 创建具有远程权限的用户:Root 用户被禁止远程登录后,你需要创建一个新用户供远程连接。
进入 MySQL 命令行:
sudo mysql
执行以下 SQL 语句(请替换为你的实际用户名和密码):
-- 创建新用户 'app_user',允许从任意主机 (%) 连接
CREATE USER 'app_user'@'%' IDENTIFIED BY 'YourStrongPassword123!';
-- 授予对特定数据库 'mydb' 的所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
最后,重启 MySQL 服务使配置生效:
sudo systemctl restart mysql
5. 验证与排错
安装完成后,你可以尝试本地登录验证:
mysql -u app_user -p
如果成功进入 (mysql> 提示符,说明安装和初始化成功。
常见问题排查:
- 连接超时:90% 的原因是云厂商的安全组没有开放 3306 端口。请登录云控制台检查入站规则。
- Access denied:检查用户创建时的 host 是否为
%,以及密码是否正确。 - 服务无法启动:查看日志
sudo journalctl -u mysql.service --no-pager -n 50,通常是因为磁盘空间满或配置文件语法错误。
总结
在 Ubuntu 上部署数据库的核心逻辑是:安装 -> 安全加固 -> 网络暴露控制。很多新手容易忽略 mysql_secure_installation 这一步,导致数据库暴露在公网且无密码保护,极易被勒索病毒盯上。务必养成规范初始化的习惯。
云技术博客