在阿里云服务器(ECS)上搭建 MySQL 数据库,需根据操作系统(推荐 CentOS 7/8 或 Ubuntu 20.04+/22.04)选择合适方式。以下是安全、稳定、生产可用的完整指南(以 Ubuntu 22.04 LTS + MySQL 8.0 为例,兼顾通用性与最佳实践):
✅ 一、前提准备
-
已开通阿里云 ECS 实例
- 操作系统:Ubuntu 22.04(64位)或 CentOS 7/8(推荐 Ubuntu,MySQL 官方支持更及时)
- 网络:确保安全组已放行 3306 端口(仅限必要 IP,切勿全网开放!)
🔒 安全建议:生产环境应通过内网访问(如应用服务器与数据库同属 VPC),或使用白名单限制来源 IP(如
192.168.1.100/32)
-
登录服务器
ssh -i your-key.pem ubuntu@<ECS公网IP>
✅ 二、安装 MySQL(推荐官方 APT 仓库,版本可控)
⚠️ 避免
apt install mysql-server(Ubuntu 自带版本较旧且含 MariaDB 替代包)
▶ 方法 1:使用 MySQL 官方 APT 仓库(推荐 ✅)
# 1. 下载并安装 MySQL APT 配置工具
cd /tmp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
# ➤ 安装时按方向键选择 "MySQL Server & Cluster" → 回车 → 选择 "mysql-8.0" → OK → Apply
# 2. 更新源并安装
sudo apt update
sudo apt install mysql-server -y
# 3. 启动并设开机自启
sudo systemctl enable mysql
sudo systemctl start mysql
▶ 方法 2:快速安装(Ubuntu 22.04 默认源含 MySQL 8.0+)
sudo apt update
sudo apt install mysql-server -y
sudo systemctl enable mysql && sudo systemctl start mysql
✅ 验证安装:
mysql --version # 应显示 MySQL 8.0.x sudo systemctl status mysql # 确保 active (running)
✅ 三、初始化安全配置(关键!)
运行安全脚本,禁用不安全默认项:
sudo mysql_secure_installation
按提示操作(强烈建议):
- Set password for root user? → ✅ 设置强密码(如
MyPass@2024!) - Remove anonymous users? →
Y - Disallow root login remotely? →
Y(禁止 root 远程登录,后续用普通用户授权) - Remove test database? →
Y - Reload privilege tables? →
Y
💡 注意:此步骤后
root用户仅可通过localhost登录(Unix socket),无法远程连接。
✅ 四、配置远程访问(按需开启,务必限制 IP!)
1. 修改 MySQL 绑定地址(允许外部连接)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address 行,修改为:
bind-address = 0.0.0.0 # 允许所有 IPv4 连接(⚠️ 必须配合安全组/IP 白名单!)
# 或更安全:bind-address = 172.16.0.10 # 仅绑定内网 IP(推荐)
保存后重启:
sudo systemctl restart mysql
2. 创建专用数据库用户(替代 root 远程登录)
sudo mysql -u root -p
在 MySQL 内执行:
-- 创建新用户(替换 'myapp' 和 'StrongPass123!')
CREATE USER 'myapp'@'%' IDENTIFIED BY 'StrongPass123!';
-- 或更安全:只允许特定 IP(如应用服务器内网 IP)
-- CREATE USER 'myapp'@'172.16.0.5' IDENTIFIED BY 'StrongPass123!';
-- 授权(按最小权限原则,此处授予指定数据库)
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp'@'%';
-- 或仅授权必要权限:
-- GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp'@'%';
FLUSH PRIVILEGES;
EXIT;
✅ 验证远程连接(从另一台机器测试):
mysql -h <ECS公网IP> -u myapp -p
✅ 五、优化基础配置(/etc/mysql/mysql.conf.d/mysqld.cnf)
添加以下配置提升稳定性与兼容性:
[mysqld]
# 字符集(重要!避免中文乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 连接与超时
max_connections = 200
wait_timeout = 28800
interactive_timeout = 28800
# 日志(可选,便于排查)
log_error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
# InnoDB 优化(根据内存调整,例如 2GB 内存可设 512M)
innodb_buffer_pool_size = 512M
重启生效:
sudo systemctl restart mysql
✅ 六、防火墙配置(Ubuntu UFW)
sudo ufw allow OpenSSH
sudo ufw allow from <应用服务器IP> to any port 3306 # ✅ 仅放行可信 IP
# 或(若必须公网访问,仅限测试):
# sudo ufw allow 3306
sudo ufw enable
✅ 七、备份与监控(生产必备)
-
自动备份脚本示例(每日备份到
/backup):# /home/ubuntu/backup-mysql.sh mysqldump -u myapp -p'StrongPass123!' --databases myapp_db | gzip > /backup/myapp_db_$(date +%F).sql.gz find /backup -name "*.sql.gz" -mtime +7 -delete添加定时任务:
crontab -e→0 2 * * * /home/ubuntu/backup-mysql.sh -
监控建议:
- 使用阿里云 云监控(安装 CloudMonitor Agent)
- 或开源方案:Prometheus + MySQL Exporter
❌ 常见错误与解决
| 现象 | 原因 | 解决 |
|---|---|---|
Access denied for user 'root'@'xxx' |
root 禁止远程登录 | 改用创建的普通用户,或临时授权:GRANT ... ON *.* TO 'root'@'%'(不推荐) |
| 连接超时/拒绝 | 安全组未放行 3306 或 UFW 阻挡 | 检查阿里云控制台「安全组」规则 + sudo ufw status |
| 中文乱码 | 字符集未设 utf8mb4 | 确认 my.cnf 中 character-set-server=utf8mb4 + 数据库/表也用该字符集 |
| 启动失败 | 配置语法错误 | sudo mysqld --validate-config 或查看错误日志:sudo tail -f /var/log/mysql/error.log |
🌐 进阶建议(生产环境)
- ✅ 高可用:部署 MySQL 主从复制(Master-Slave)或使用阿里云 RDS MySQL(免运维、自动备份、读写分离)
- ✅ 安全加固:启用 SSL 连接、定期轮换密码、审计日志(
mysql-audit插件) - ✅ 性能调优:根据业务负载分析慢查询(
EXPLAIN)、优化索引、调整innodb_buffer_pool_size
需要我为你提供:
- 🐧 CentOS 7/8 的详细安装步骤?
- 📦 Docker 方式一键部署 MySQL?
- 🔐 SSL 加密连接配置教程?
- 📊 阿里云 RDS 与自建 MySQL 对比选型建议?
欢迎随时告诉我,我会为你定制化补充! 🚀
云小栈