在新购的 Linux 云服务器(如 Ubuntu/CentOS)上部署 MySQL 数据库,需兼顾安全性、稳定性与生产可用性。以下是清晰、分步、符合最佳实践的部署指南(以 Ubuntu 22.04/24.04 为主,附 CentOS/RHEL 9 差异说明):
✅ 一、前期准备(重要!)
-
登录服务器
ssh -i your-key.pem ubuntu@your-server-ip # Ubuntu 默认用户为 ubuntu # 或 root@...(若允许 root 登录) -
更新系统 & 安装基础工具
# Ubuntu/Debian sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget gnupg2 lsb-release software-properties-common # CentOS/RHEL 9(使用 dnf) sudo dnf update -y sudo dnf install -y curl wget gnupg2 -
配置防火墙(强烈建议启用)
# Ubuntu (UFW) sudo ufw allow OpenSSH sudo ufw enable # 后续再开放 MySQL 端口(仅限必要 IP,非全开放!) # sudo ufw allow from 192.168.1.100 to any port 3306 # 示例:只允特定IP访问 # CentOS/RHEL 9 (firewalld) sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
✅ 二、安装 MySQL(推荐官方 APT/YUM 源,非系统默认旧版)
🔹 方式 1:安装 MySQL 官方最新稳定版(推荐 ✅)
✨ 优势:版本新(如 8.4+)、安全更新及时、支持
caching_sha2_password、TLS 1.3 等。
# 1. 下载并安装 MySQL APT 仓库配置包(Ubuntu/Debian)
curl -OL 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" → 选最新版(如 8.4)→ OK
sudo apt update
sudo apt install -y mysql-server
# CentOS/RHEL 9(使用 MySQL YUM 仓库)
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm
sudo dnf config-manager --disable mysql57-community # 禁用旧版
sudo dnf config-manager --enable mysql80-community
sudo dnf install -y mysql-community-server
❌ 不推荐:sudo apt install mysql-server(Ubuntu 自带 8.0.x 但可能较旧且配置简陋)
✅ 三、初始化与安全加固(关键步骤!)
-
启动服务并设开机自启
sudo systemctl enable mysql sudo systemctl start mysql sudo systemctl status mysql # ✅ 确认 active (running) -
运行安全脚本(必须执行!)
sudo mysql_secure_installation按提示操作:
- 设置 root 密码(✅ 强密码,记录!)
- 移除匿名用户? →
Y - 禁止 root 远程登录? →
Y(生产环境必须!) - 删除 test 数据库? →
Y - 重新加载权限表? →
Y
-
验证登录(本地)
sudo mysql -u root -p # 输入刚设的 root 密码 # 成功进入后退出: mysql> exit;
✅ 四、配置优化(生产必备)
1. 编辑 MySQL 配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
添加/修改以下关键项(根据服务器内存调整):
[mysqld]
# 基础安全
bind-address = 127.0.0.1 # ❗禁止网络监听(除非明确需要远程)
# 若需远程访问(不推荐),改为 bind-address = 0.0.0.0 并严格限制防火墙!
# 字符集(避免中文乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 性能调优(示例:4GB 内存服务器)
innodb_buffer_pool_size = 1G # 推荐设为物理内存 50%~75%
innodb_log_file_size = 256M
max_connections = 200
wait_timeout = 300
interactive_timeout = 300
# 日志(可选,便于排错)
log_error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
2. 创建专用数据库与用户(❌ 禁止用 root 连接应用!)
sudo mysql -u root -p
-- 创建数据库(UTF8MB4 支持 emoji)
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(仅限本地连接)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
-- 授予最小必要权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'myapp_user'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- ✅ 验证用户
SELECT User, Host FROM mysql.user WHERE User = 'myapp_user';
EXIT;
💡 如需远程访问(例如本地开发机连接云服务器):
CREATE USER 'myapp_user'@'192.168.1.100' IDENTIFIED BY 'StrongPass123!'; GRANT ... ON myapp.* TO 'myapp_user'@'192.168.1.100';并务必在防火墙中仅放行该 IP 的 3306 端口!
✅ 五、验证与测试
-
用新用户登录测试
mysql -u myapp_user -p -D myapp # 输入密码,成功进入即 OK -
创建测试表
CREATE TABLE test (id INT PRIMARY KEY AUTO_INCREMENT, msg VARCHAR(100)); INSERT INTO test (msg) VALUES ('Hello MySQL on Cloud!'); SELECT * FROM test; -
检查错误日志
sudo tail -f /var/log/mysql/error.log # 查看启动/报错信息
✅ 六、进阶建议(生产环境必做)
| 项目 | 操作 |
|---|---|
| 备份策略 | 配置 mysqldump + cron 定时备份,或使用 mysqlbackup/Percona XtraBackup |
| 监控 | 部署 Prometheus + mysqld_exporter 或使用云厂商监控(如阿里云云监控) |
| SSL/TLS | 启用强制加密连接(require_secure_transport = ON),生成证书并配置 |
| 主从复制 | 高可用场景下配置读写分离(需额外服务器) |
| 应用连接 | 应用配置中使用 ?charset=utf8mb4&parseTime=true&loc=Local(Go/Java 等) |
🚫 常见错误排查
| 现象 | 解决方案 |
|---|---|
Can't connect to local MySQL server |
检查 systemctl status mysql;确认 bind-address 和 socket 路径 |
Access denied for user 'root'@'localhost' |
使用 sudo mysql 免密登录,重置密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'NewPass'; |
| 中文乱码 | 确认 my.cnf 中 character-set-server=utf8mb4 + 表/列也设为 utf8mb4 |
| 远程无法连接 | 检查:① bind-address=0.0.0.0 ② 防火墙放行 3306 ③ 用户 Host 是 % 或具体 IP ④ 云服务器安全组(如阿里云/腾讯云控制台)开放 3306 |
✅ 完成! 你的 MySQL 已安全、高效地运行在云服务器上。
📌 最后提醒:
- 永远不要在生产环境暴露 root 远程访问
- 定期更新 MySQL 和操作系统
- 敏感数据加密存储,备份离线保存
需要我为你生成:
- ✅ 自动化部署脚本(Bash)
- ✅ Docker Compose 部署方案
- ✅ 备份脚本 + 定时任务示例
- ✅ SSL 配置详细步骤
欢迎随时告诉我 👇
CLOUD技术博