在云服务器上手动安装数据库,虽然不如云厂商提供的“一键部署”或托管服务(如 RDS)那样省心,但对于需要深度定制、学习底层原理或者控制成本的用户来说,这是必经之路。
这里以目前企业级应用中最主流的 MySQL 为例,结合 Linux 操作系统(主要是 CentOS/RHEL 系列和 Ubuntu/Debian 系列),梳理出最稳妥、通用的标准操作流程。其他数据库(如 PostgreSQL, Redis, MongoDB)逻辑大同小异,只是包管理器和服务名不同。
一、 核心前置准备:环境与安全组
很多新手直接去服务器里装软件,结果发现连不上,第一步其实是检查网络策略。
-
安全组/防火墙放行端口
- 如果你用的是阿里云 ECS、腾讯云 CVM 等国内主流云平台,必须在控制台的安全组规则中,添加入方向规则,允许 TCP 协议的 3306 端口(MySQL默认)访问。
- 注意:如果是生产环境,建议将源 IP 限制为你的应用服务器 IP 或管理 IP,不要直接对
0.0.0.0/0开放,防止被暴力破解。
-
系统基础优化
- 确保系统已更新:
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
该脚本会引导你完成以下操作:
- 修改 root 密码(必须包含大小写、数字、特殊字符,长度至少8位)。
- 移除匿名账户。
- 禁止 root 远程登录(强烈建议,除非你有特殊需求)。
- 移除 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。如果需要从外部连接:
- 编辑配置文件
/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf。 - 注释掉或修改
bind-address = 127.0.0.1为0.0.0.0。 - 重启服务。
- 重要:进入数据库,创建一个允许远程登录的用户,而不是直接给 root 开远程权限(安全风险极大):
CREATE USER 'app_user'@'%' IDENTIFIED BY 'ComplexPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%'; FLUSH PRIVILEGES;
四、 进阶调优与验证
装好只是开始,要让数据库跑得快、稳,还需要做以下几件事:
-
配置文件微调 (
my.cnf)- innodb_buffer_pool_size:物理内存的 50%-70% 是黄金比例。
- max_connections:根据业务并发量调整,避免过高导致内存溢出。
- log_error:确认错误日志路径,定期轮转(logrotate)。
-
备份策略
- 手动安装的数据库没有自动备份。务必配置
crontab定时任务,使用mysqldump或xtrabackup全量/增量备份到 OSS/S3 或其他对象存储。 - 示例:每天凌晨 2 点备份,保留最近 7 天。
- 手动安装的数据库没有自动备份。务必配置
-
监控接入
- 安装 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 层产品;如果是为了掌控力、定制化或合规要求,那么上述的手动流程配合规范的运维文档,才是正道。
云技术博客