努力
加油

Ubuntu服务器如何通过命令行安装和初始化数据库服务?

在 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

执行过程中,你会遇到几个交互式选项,以下是针对生产环境的推荐选择:

  1. Validate Password Component(密码验证组件):

    • 询问是否启用密码强度验证插件。
    • 建议:输入 Y。这能有效防止弱口令,提升安全性。后续会让你选择密码等级(LOW, MEDIUM, STRONG),选 2 (STRONG) 最为稳妥。
  2. Change the root password?(修改 Root 密码):

    • 如果你在安装前没设密码,这里需要设置一个强密码。
    • 建议:输入 Y,并设置包含大小写字母、数字和特殊字符的复杂密码。
  3. Remove anonymous users?(删除匿名用户):

    • 建议:输入 Y。匿名用户可以无需密码登录,存在极大风险。
  4. Disallow root login remotely?(禁止 Root 远程登录):

    • 建议:输入 Y。绝对不要允许 root 用户从外部 IP 直接连接数据库。如果需要远程管理,应创建专门的普通用户并赋予权限。
  5. Remove test database and access to it?(删除测试数据库):

    • 建议:输入 Y。测试库在生产环境中毫无用处,反而可能成为攻击入口。
  6. 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 退出)。

重要提醒:
仅仅修改配置文件是不够的,你还需要:

  1. 防火墙放行:确保云服务器的安全组(Security Group)或系统的 ufw 放行了 3306 端口。
  2. 创建具有远程权限的用户: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 这一步,导致数据库暴露在公网且无密码保护,极易被勒索病毒盯上。务必养成规范初始化的习惯。