在阿里云服务器未配置数据盘的情况下,安全地安装和使用 MySQL 数据库是完全可行的,但需要特别注意数据安全、性能优化和备份策略。以下是详细的操作建议和最佳实践:
一、安装 MySQL(以 CentOS/Ubuntu 为例)
1. 更新系统
# CentOS/RHEL
sudo yum update -y
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
2. 安装 MySQL
CentOS 8 / Stream
sudo dnf install mysql-server -y
sudo systemctl enable mysqld
sudo systemctl start mysqld
Ubuntu
sudo apt install mysql-server -y
sudo systemctl enable mysql
sudo systemctl start mysql
3. 初始化安全设置
运行 MySQL 自带的安全脚本:
sudo mysql_secure_installation
- 设置强 root 密码
- 删除匿名用户
- 禁止 root 远程登录
- 删除测试数据库
- 重新加载权限表
二、安全配置建议(关键步骤)
1. 修改默认配置文件
编辑 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
# 基础设置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 绑定地址(仅允许本地访问)
bind-address = 127.0.0.1
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 日志设置
log-error = /var/log/mysqld.log
slow-query-log = 1
slow-query-log-file = /var/log/mysql-slow.log
long_query_time = 2
# 性能调优(根据内存调整)
innodb_buffer_pool_size = 512M # 推荐为物理内存的 50%~70%
max_connections = 100
⚠️ 注意:如果服务器内存小于 2GB,适当降低
innodb_buffer_pool_size。
2. 防火墙限制
只允许必要的 IP 访问(如应用服务器):
# 开放 3306 端口给特定 IP(不推荐开放公网)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'
sudo firewall-cmd --reload
🔒 强烈建议:不要将 3306 端口暴露在公网。应通过内网连接或 SSH 隧道访问。
三、数据安全与备份策略
由于没有独立数据盘,所有数据存储在系统盘上,存在以下风险:
- 系统盘损坏导致数据丢失
- 磁盘空间不足影响服务
- 系统重装导致数据清空
✅ 必须实施的措施:
1. 定期自动备份
创建每日备份脚本:
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER="root"
DB_PASS="your_strong_password"
mkdir -p $BACKUP_DIR
mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers --all-databases | gzip > "$BACKUP_DIR/all_databases_$DATE.sql.gz"
# 保留最近7天备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
添加到 crontab:
crontab -e
# 每天凌晨2点执行
0 2 * * * /path/to/backup_script.sh
2. 备份上传至 OSS(推荐)
使用阿里云 OSS 存储备份,防止本地丢失:
# 安装 ossutil
wget http://gosspublic.alicdn.com/ossutil/latest/ossutil64
chmod +x ossutil64
# 上传备份
./ossutil64 cp "$BACKUP_DIR/all_databases_$DATE.sql.gz" oss://your-backup-bucket/mysql/
3. 监控磁盘空间
# 添加监控脚本
df -h /var/lib/mysql | awk 'NR==2 {if ($5+0 > 80) print "Warning: Disk usage is " $5}'
四、最佳实践总结
| 项目 | 建议 |
|---|---|
| 数据存储位置 | 使用 /var/lib/mysql(默认),避免手动迁移 |
| 远程访问 | 禁用,或通过 VPC 内网 + 安全组控制 |
| 用户权限 | 创建专用应用用户,最小权限原则 |
| 密码策略 | 启用强密码插件,定期更换 |
| 日志管理 | 开启慢查询日志,定期清理 |
| 升级维护 | 定期更新 MySQL 补丁 |
五、后续建议(长期使用)
虽然当前可用,但为了生产环境稳定性,建议:
- 挂载数据盘:购买云盘并挂载到
/data/mysql,迁移数据目录 - 使用 RDS:考虑迁移到阿里云 RDS MySQL,获得高可用、自动备份等能力
- 主从复制:搭建主从架构,提高可用性
六、紧急恢复准备
确保你有:
- 最近的数据库备份(本地 + OSS)
- MySQL 配置文件副本
- 操作手册文档
✅ 结论:在无数据盘情况下可以安全使用 MySQL,但必须做好备份、监控、权限控制和防火墙策略。适用于开发、测试或小型生产环境。重要业务建议尽快挂载数据盘或迁移到 RDS。
云小栈