在阿里云 ECS 实例上配置和安装数据库服务(以主流的 MySQL、PostgreSQL 或 MariaDB 为例),需遵循以下安全、稳定、可维护的最佳实践流程。以下以 CentOS 7/8 或 Alibaba Cloud Linux 3(推荐) 为例,提供详细、分步、生产就绪的操作指南(以 MySQL 8.0 为主,其他数据库附简要对比):
✅ 一、前期准备(重要!)
-
选择合适 ECS 实例规格
- 数据库建议:≥2 核 CPU、4 GB 内存(轻量级业务)、SSD 云盘(推荐 ESSD PL1 或更高性能)
- 系统镜像:推荐 Alibaba Cloud Linux 3(兼容 RHEL 8/CentOS 8) 或 Ubuntu 22.04 LTS(长期支持、安全更新及时)
-
安全组配置(必须!)
- 在阿里云控制台 → ECS → 安全组 → 添加入方向规则:
- MySQL:端口
3306(仅允许信任 IP,如跳板机或应用服务器 IP;严禁 0.0.0.0/0 开放!) - PostgreSQL:
5432 - SSH:
22(同样限制来源 IP)
- MySQL:端口
- ✅ 不开放公网数据库端口是安全底线!
- 在阿里云控制台 → ECS → 安全组 → 添加入方向规则:
-
登录 ECS 实例
ssh -i your-key.pem root@<ECS公网IP>
🐘 二、安装 MySQL 8.0(推荐方式:官方 YUM 源 + systemd 管理)
✅ 优势:版本新、自动依赖管理、符合 Linux 标准、支持 SELinux/AppArmor
步骤 1:添加 MySQL 官方 YUM 仓库(Alibaba Cloud Linux 3 / CentOS 8+)
# 下载并安装 MySQL YUM 源(以 MySQL 8.0 为例)
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
# 启用 MySQL 8.0 社区版(禁用其他版本,如 5.7)
sudo dnf config-manager --disable mysql57-community
sudo dnf config-manager --enable mysql80-community
# 验证启用状态
sudo dnf repolist enabled | grep mysql
步骤 2:安装 MySQL Server
sudo dnf install -y mysql-community-server
步骤 3:初始化并启动服务
# 初始化数据目录(MySQL 8.0+ 自动执行,但可显式触发确保安全)
sudo mysqld --initialize --user=mysql
# 查看临时 root 密码(首次启动后生成,记录下来!)
sudo grep 'temporary password' /var/log/mysqld.log
# 启动并设为开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld
# 检查状态
sudo systemctl status mysqld # 应显示 active (running)
步骤 4:运行安全配置向导(必做!)
sudo mysql_secure_installation
按提示操作:
- 输入临时密码 → 设置强 root 密码(建议 12 位以上,含大小写字母+数字+符号)
- 移除匿名用户?→
Y - 禁止 root 远程登录?→
Y(✅ 生产环境强烈推荐,后续通过应用服务器连接) - 删除 test 数据库?→
Y - 重载权限表?→
Y
步骤 5:配置 MySQL(关键优化项)
编辑主配置文件:
sudo vi /etc/my.cnf.d/mysql-server.cnf
在 [mysqld] 段添加(根据实例内存调整):
[mysqld]
# 基础设置
bind-address = 127.0.0.1 # 仅监听本地(若需内网其他ECS访问,改为内网IP,如 172.xx.xx.xx)
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB 优化(SSD 推荐)
innodb_buffer_pool_size = 2G # ≈ 内存的 50%~75%,4GB内存建议设为 2G~3G
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
# 日志与安全
log-error = /var/log/mysqld.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
# 可选:开启远程访问(仅限内网,且需安全组放行内网IP段)
# bind-address = 172.16.0.100 # 替换为本ECS内网IP
重启生效:
sudo systemctl restart mysqld
步骤 6:创建业务数据库与用户(示例)
mysql -u root -p
-- 创建数据库(指定字符集)
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(禁止 root 远程/应用直连!)
CREATE USER 'appuser'@'172.16.0.%' IDENTIFIED BY 'StrongPass123!'; -- 仅允许VPC内网访问
-- 或仅本机:'appuser'@'localhost'
-- 授权(最小权限原则)
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'appuser'@'172.16.0.%';
-- 刷新权限
FLUSH PRIVILEGES;
✅ 验证连接(从同一 VPC 内另一台 ECS 测试):
mysql -h <数据库ECS内网IP> -u appuser -p -D myapp
📌 三、其他数据库快速参考
| 数据库 | 安装命令(Alibaba Cloud Linux 3 / CentOS 8) | 关键配置注意点 |
|---|---|---|
| PostgreSQL 15 | sudo dnf install -y postgresql15-server && sudo postgresql15-setup initdb && sudo systemctl enable postgresql15 && sudo systemctl start postgresql15 |
修改 /var/lib/pgsql/15/data/postgresql.conf:listen_addresses = '127.0.0.1'(或内网IP)pg_hba.conf 添加 host mydb appuser 172.16.0.0/16 md5 |
| MariaDB 10.11 | sudo dnf install -y mariadb-server && sudo systemctl enable mariadb && sudo mysql_secure_installation |
默认兼容 MySQL,配置文件 /etc/my.cnf.d/server.cnf,建议启用 innodb_file_per_table=ON |
| Redis 7(缓存) | sudo dnf install -y redis && sudo systemctl enable redis && sudo vi /etc/redis.conf → bind 127.0.0.1 + protected-mode yes |
生产务必设密码:requirepass YourRedisPass123! |
⚠️ 四、生产环境关键注意事项
| 类别 | 建议 |
|---|---|
| 备份 | ✅ 使用 mysqldump + 定时任务(每日全备+binlog增量)或阿里云 DBS 备份服务(支持秒级恢复、异地容灾) |
| 监控 | ✅ 阿里云 云监控 > 云数据库 MySQL 监控(CPU/内存/连接数/慢查询)或自建 Prometheus + MySQL Exporter |
| 高可用 | ✅ 单实例适合测试;生产务必使用 阿里云 RDS MySQL(高可用版):自动主从、故障秒级切换、SQL审计、透明加密等 |
| 安全加固 | • 禁用 root 远程登录 • 应用使用最小权限账号 • 开启 SSL( require_secure_transport=ON)• 定期更新系统与数据库补丁 |
| 日志管理 | ✅ 使用 logrotate 管理 slow log/error log,防止占满磁盘(配置 /etc/logrotate.d/mysqld) |
🚀 五、进阶推荐(云原生最佳实践)
| 场景 | 推荐方案 |
|---|---|
| 生产核心业务 | 直接使用 阿里云 RDS for MySQL/PostgreSQL(免运维、弹性升降配、自动备份、只读实例、读写分离) |
| 需要完全自控 | ECS + Docker(如 docker run -d --name mysql8 -e MYSQL_ROOT_PASSWORD=... -v /data:/var/lib/mysql -p 3306:3306 mysql:8.0)→ 配合阿里云 NAS 存储 |
| 多环境统一管理 | 使用 Terraform + Ansible 自动化部署数据库配置(阿里云提供 Terraform Provider) |
✅ 总结一句话:
对于学习/测试:ECS 自建 MySQL 完全可行,按上述步骤安全安装;
对于生产环境:强烈建议直接选用阿里云 RDS —— 节省 90% 运维成本,专注业务开发,享受企业级 SLA(99.95% 可用性)。
如需我为你生成:
- ✅ 完整的
my.cnf优化模板(按 2C4G / 4C8G / 8C16G 分类) - ✅ 自动化备份脚本(含 binlog 清理 + OSS 上传)
- ✅ Ansible Playbook 一键部署 MySQL
- ✅ RDS 迁移至 ECS 的详细方案
欢迎随时告诉我,我可以立即为你定制 👇
是否需要我为你生成某个具体场景的脚本或配置?
云小栈