努力
加油

在云服务器上手动安装数据库需要哪些基本步骤?

在云服务器上手动安装数据库,虽然不如云厂商提供的“一键部署”或托管服务(如 RDS)那样省心,但对于需要深度定制、学习底层原理或者控制成本的用户来说,这是必经之路。

这里以目前企业级应用中最主流的 MySQL 为例,结合 Linux 操作系统(主要是 CentOS/RHEL 系列和 Ubuntu/Debian 系列),梳理出最稳妥、通用的标准操作流程。其他数据库(如 PostgreSQL, Redis, MongoDB)逻辑大同小异,只是包管理器和服务名不同。

一、 核心前置准备:环境与安全组

很多新手直接去服务器里装软件,结果发现连不上,第一步其实是检查网络策略。

  1. 安全组/防火墙放行端口

    • 如果你用的是阿里云 ECS、腾讯云 CVM 等国内主流云平台,必须在控制台的安全组规则中,添加入方向规则,允许 TCP 协议的 3306 端口(MySQL默认)访问。
    • 注意:如果是生产环境,建议将源 IP 限制为你的应用服务器 IP 或管理 IP,不要直接对 0.0.0.0/0 开放,防止被暴力破解。
  2. 系统基础优化

    • 确保系统已更新:yum update -y (CentOS) 或 apt update && apt upgrade -y (Ubuntu)。
    • 关闭 SELinux 或将其设置为 Permissive 模式(除非你非常熟悉 SELinux 的策略配置,否则它会成为排错的黑洞)。
    • 调整文件描述符限制:数据库是高并发 IO 密集型应用,默认的 ulimit 往往不够,需要在 /etc/security/limits.conf 中调大 nofile 和 nproc。

二、 选择安装方式

手动安装主要有三种流派,推荐程度依次递减:

  • 方案 A:使用官方 YUM/APT 源安装(推荐)
    • 优点:依赖自动处理,升级方便,有 systemd 服务管理,符合运维规范。
    • 缺点:版本通常不是最新的(为了稳定性),但足够稳定。
  • 方案 B:编译源码安装
    • 优点:极致性能优化,可定制组件。
    • 缺点:耗时极长,依赖库复杂,排错困难,非资深 DBA 不推荐。
  • 方案 C:二进制包解压安装
    • 优点:速度快,版本新。
    • 缺点:需手动配置环境变量、创建用户、编写启动脚本,容易遗漏细节。

下面以 方案 A(YUM/APT 官方源) 为主进行步骤拆解。

三、 具体安装步骤(以 MySQL 8.0 为例)

1. 添加软件源

不要直接用系统自带的源,因为版本可能过老。去 MySQL 官网下载对应的 repo 文件。

  • CentOS/RHEL:
    # 下载并安装 MySQL 官方源
    sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
  • Ubuntu/Debian:
    # 添加 GPG key 和源
    wget https://repo.mysql.com/apt/ubuntu/dists/jammy/mysql-8.0.list
    sudo mv mysql-8.0.list /etc/apt/sources.list.d/
    sudo apt-get update

2. 执行安装命令

# CentOS
sudo yum install mysql-community-server -y

# Ubuntu
sudo apt install mysql-server -y

安装过程中,YUM/APT 会自动解决依赖关系,并初始化数据目录。

3. 启动与设置开机自启

现代 Linux 发行版都使用 systemd。

# 启动服务
sudo systemctl start mysqld
# 查看状态
sudo systemctl status mysqld
# 设置开机自启
sudo systemctl enable mysqld

注意:如果启动失败,第一时间查看日志:journalctl -xeu mysqld.service 或 /var/log/mysqld.log。常见错误包括端口冲突、权限不足或磁盘空间满。

4. 初始安全加固(关键步骤)

安装完成后,数据库处于“裸奔”状态。

对于 MySQL 5.7+ / 8.0:
首次启动时,MySQL 会在日志中生成一个临时随机密码。

grep 'temporary password' /var/log/mysqld.log

获取密码后,运行安全脚本:

sudo mysql_secure_installation

该脚本会引导你完成以下操作:

  1. 修改 root 密码(必须包含大小写、数字、特殊字符,长度至少8位)。
  2. 移除匿名账户。
  3. 禁止 root 远程登录(强烈建议,除非你有特殊需求)。
  4. 移除 test 数据库。

对于 MySQL 8.0 的特殊情况:
如果 mysql_secure_installation 无法连接(因为插件认证方式改变),你可以先通过空密码或临时密码登录,然后手动重置:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourNewStrongPassword';
FLUSH PRIVILEGES;

5. 配置远程访问(按需)

默认情况下,MySQL 只监听本地 127.0.0.1。如果需要从外部连接:

  1. 编辑配置文件 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf。
  2. 注释掉或修改 bind-address = 127.0.0.1 为 0.0.0.0。
  3. 重启服务。
  4. 重要:进入数据库,创建一个允许远程登录的用户,而不是直接给 root 开远程权限(安全风险极大):
    CREATE USER 'app_user'@'%' IDENTIFIED BY 'ComplexPassword123!';
    GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%';
    FLUSH PRIVILEGES;

四、 进阶调优与验证

装好只是开始,要让数据库跑得快、稳,还需要做以下几件事:

  1. 配置文件微调 (my.cnf)

    • innodb_buffer_pool_size:物理内存的 50%-70% 是黄金比例。
    • max_connections:根据业务并发量调整,避免过高导致内存溢出。
    • log_error:确认错误日志路径,定期轮转(logrotate)。
  2. 备份策略

    • 手动安装的数据库没有自动备份。务必配置 crontab 定时任务,使用 mysqldump 或 xtrabackup 全量/增量备份到 OSS/S3 或其他对象存储。
    • 示例:每天凌晨 2 点备份,保留最近 7 天。
  3. 监控接入

    • 安装 Prometheus Node Exporter + MySQL Exporter,或者使用 Zabbix Agent,接入你的监控大盘。重点关注 QPS、TPS、慢查询、连接数、IO 等待。

五、 常见坑点总结

  • 编码问题:新建库表时,务必指定 utf8mb4 字符集和 utf8mb4_0900_ai_ci 排序规则,避免 emoji 表情插入报错。
  • 时间同步:确保服务器 NTP 时间同步准确,否则主从复制、事务日志会出现诡异问题。
  • Swap 分区:生产环境建议关闭 Swap,或者降低 vm.swappiness 值,防止数据库进程被 swap 出去导致性能抖动。
  • 内核参数:调整 /etc/sysctl.conf 中的 net.ipv4.tcp_tw_reuse, fs.file-max 等参数,提升高并发下的网络连接能力。

结语

手动安装数据库的核心不在于“敲命令”,而在于理解配置背后的含义以及建立完善的运维体系(备份、监控、告警)。如果只是单纯想快速上线业务,建议优先考虑云厂商的 PaaS 层产品;如果是为了掌控力、定制化或合规要求,那么上述的手动流程配合规范的运维文档,才是正道。