在新购的 Linux 云服务器上部署 MySQL 数据库,建议采用官方推荐方式(MySQL APT/YUM 仓库)安装最新稳定版(如 MySQL 8.0),兼顾安全性、功能完整性和长期维护性。以下是详细、安全、生产就绪的部署步骤(以 Ubuntu 22.04/24.04 或 CentOS 7/8/9 为例,含关键注意事项):
✅ 一、前期准备(务必执行)
# 1. 更新系统(Ubuntu/Debian)
sudo apt update && sudo apt upgrade -y
# 或 CentOS/RHEL(根据版本选择)
sudo yum update -y # CentOS 7
sudo dnf update -y # CentOS 8+/Rocky/AlmaLinux
# 2. 关闭或配置防火墙(按需开放3306端口)
# Ubuntu (UFW)
sudo ufw allow OpenSSH
sudo ufw allow 3306 # 仅限信任IP更安全(见下方)
sudo ufw enable
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
# 🔒 强烈建议:不要直接开放3306给公网!
# ✅ 正确做法:仅允许跳板机/IP白名单(例如)
sudo ufw allow from 192.168.1.100 to any port 3306
# 或使用云平台安全组(更推荐!)→ 在阿里云/腾讯云/AWS控制台设置入站规则,仅允许可信IP访问3306。
✅ 二、安装 MySQL(推荐官方仓库,非系统默认 mariadb)
▶ Ubuntu/Debian(以 22.04 为例)
# 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
sudo apt update
sudo apt install mysql-server -y
# 2. 启动并设为开机自启
sudo systemctl enable mysql
sudo systemctl start mysql
▶ CentOS/RHEL/Rocky/AlmaLinux
# 1. 添加 MySQL YUM 仓库
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{rhel}')-1.noarch.rpm
# 2. 确认启用 mysql80 模块(禁用其他版本)
sudo dnf module reset mysql
sudo dnf module enable mysql:8.0
# 3. 安装
sudo dnf install mysql-community-server -y
# 4. 启动并开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld
💡 提示:首次启动后,MySQL 会自动生成临时 root 密码(Ubuntu 查
/var/log/mysql/error.log;CentOS 查/var/log/mysqld.log):sudo grep 'temporary password' /var/log/mysqld.log # CentOS sudo grep 'temporary password' /var/log/mysql/error.log # Ubuntu
✅ 三、安全初始化(关键!必须执行)
sudo mysql_secure_installation
按提示操作(强烈建议):
- ✅ 设置强 root 密码(至少8位,含大小写字母+数字+符号)
- ❌ 删除匿名用户 →
Y - ❌ 禁用远程 root 登录 →
Y(保持仅 localhost 可登录) - ✅ 删除 test 数据库及访问权限 →
Y - ✅ 重载权限表 →
Y
⚠️ 注意:此命令会禁用
root@%远程登录,符合最小权限原则。
✅ 四、配置优化(生产必备)
1. 编辑主配置文件(路径因发行版而异)
# Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf
# CentOS: /etc/my.cnf 或 /etc/my.cnf.d/mysql-server.cnf
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
2. 关键配置项(添加/修改以下内容到 [mysqld] 段):
[mysqld]
# 基础安全
bind-address = 127.0.0.1 # ❗仅监听本地(若需内网其他机器访问,改为内网IP如 10.0.0.5)
skip-name-resolve # 提速连接,禁用DNS反查
# 字符集(避免中文乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 日志与性能(可选但推荐)
log-error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# 内存优化(根据服务器内存调整,示例为4GB内存)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
# 其他加固
default_authentication_plugin = mysql_native_password # 兼容旧客户端(MySQL 8.0+ 默认caching_sha2_password)
3. 创建日志目录并授权(如启用慢日志)
sudo mkdir -p /var/log/mysql
sudo chown mysql:mysql /var/log/mysql
sudo touch /var/log/mysql/{error,slow}.log
sudo chown mysql:mysql /var/log/mysql/*.log
4. 重启服务生效
sudo systemctl restart mysql
✅ 五、创建应用数据库与用户(禁止直接用 root)
# 登录 MySQL(使用刚设置的 root 密码)
sudo mysql -u root -p
# 在 MySQL shell 中执行:
mysql> CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
mysql> GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
✅ 若应用需远程访问(不推荐公网):
CREATE USER 'myapp_user'@'10.0.0.%' IDENTIFIED BY 'StrongPass123!'; -- 仅限内网段 GRANT SELECT,INSERT,UPDATE,DELETE ON myapp.* TO 'myapp_user'@'10.0.0.%';🔐 再次强调:绝不在生产环境开放
@'%'或公网 3306 端口!
✅ 六、验证与连通性测试
# 1. 本地连接测试
mysql -u myapp_user -p -D myapp
# 2. 检查字符集
mysql> SHOW VARIABLES LIKE 'character_set%';
mysql> SHOW VARIABLES LIKE 'collation%';
# 3. 查看状态
sudo systemctl status mysql
🚨 重要安全提醒(生产红线)
| 风险点 | 正确做法 |
|---|---|
| root 远程登录 | mysql_secure_installation 已禁用,切勿手动开启 root@'%' |
| 弱密码 | 使用 VALIDATE_PASSWORD 插件强制策略(可选启用) |
| 公网暴露 3306 | ✅ 云平台安全组只放行可信 IP ✅ 应用与 DB 同 VPC 内网通信 ❌ 禁止安全组全开放 0.0.0.0/0 |
| 未备份 | 立即配置定时备份(mysqldump + cron + 对象存储) |
| 未监控 | 部署 mysql-exporter + Prometheus + Grafana 监控连接数、慢查询等 |
✅ 附:快速备份脚本(保存为 /root/backup_mysql.sh)
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/mysql"
mkdir -p $BACKUP_DIR
mysqldump -u root -p'YourRootPass' --all-databases --single-transaction | gzip > $BACKUP_DIR/full_$DATE.sql.gz
find $BACKUP_DIR -name "full_*.sql.gz" -mtime +7 -delete
chmod +x /root/backup_mysql.sh
# 添加到 crontab 每天2点执行
echo "0 2 * * * /root/backup_mysql.sh" | sudo crontab -
✅ 完成!
你现在拥有一套安全、稳定、可维护的 MySQL 生产环境。后续可根据业务需求:
- 配置主从复制(高可用)
- 启用 SSL 加密连接
- 使用 ProxySQL 或 Vitess 分库分表
- 迁移至云数据库(如阿里云 RDS)进一步减负
需要我为你生成 一键部署脚本、主从配置指南 或 Docker 方式部署方案,欢迎随时提出! 🐘
CLOUD云计算