在新购的 Linux 云服务器上部署 MySQL 数据库,推荐使用 MySQL 官方 APT/YUM 仓库安装(推荐) 或 Docker 方式(轻量、隔离性好)。以下是详细、安全、生产就绪的部署指南(以 Ubuntu 22.04/24.04 或 CentOS 7/8/9 为例,兼顾通用性):
✅ 一、前期准备(所有系统必做)
-
更新系统并升级
# Ubuntu/Debian sudo apt update && sudo apt upgrade -y # CentOS/RHEL/Rocky/AlmaLinux sudo dnf update -y # RHEL 8+/CentOS 8+ # 或 sudo yum update -y # CentOS 7(已 EOL,建议升级) -
配置防火墙(开放 3306 端口)
# Ubuntu (UFW) sudo ufw allow OpenSSH sudo ufw allow 3306 sudo ufw enable # CentOS/RHEL (firewalld) sudo firewall-cmd --permanent --add-service=mysql sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload -
确保时区正确(避免日志/备份时间混乱)
sudo timedatectl set-timezone Asia/Shanghai # 根据实际调整 sudo timedatectl status
✅ 二、部署 MySQL(推荐方式:官方仓库安装)
⚠️ 不建议用系统默认包(如
apt install mysql-server),Ubuntu 默认是 MariaDB;CentOS 8+ 默认无 MySQL。应使用 MySQL 官方 APT/YUM 源 获取最新稳定版(如 MySQL 8.0.x)。
▶ 方法 1:Ubuntu/Debian(官方 APT)
# 1. 下载并安装 MySQL APT 配置工具(获取最新源)
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" → 选 8.0(回车确认)→ OK
# 2. 更新源并安装
sudo apt update
sudo apt install mysql-server -y
# 3. 启动并设为开机自启
sudo systemctl enable mysql
sudo systemctl start mysql
▶ 方法 2:RHEL/CentOS/Rocky/AlmaLinux(官方 YUM/DNF)
# 1. 下载并安装 MySQL YUM 仓库
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{rhel}')-1.noarch.rpm -y
# 2. (可选)禁用其他 MySQL 模块(避免冲突)
sudo dnf module reset mysql
sudo dnf module enable mysql:8.0
# 3. 安装 MySQL Server
sudo dnf install mysql-community-server -y
# 4. 启动并开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld
# 5. 查看初始 root 密码(仅首次启动生成)
sudo grep 'temporary password' /var/log/mysqld.log # CentOS/RHEL
# Ubuntu 日志路径:/var/log/mysql/error.log(搜索 "A temporary password")
✅ 三、安全初始化与基础配置
运行安全脚本(强烈建议!):
sudo mysql_secure_installation
按提示操作:
- 输入当前 root 密码(首次运行时填上一步查到的临时密码)
- ✅ 更改 root 密码(设为强密码,记录保存)
- ✅ 移除匿名用户
- ✅ 禁止 root 远程登录(生产环境建议仅本地访问,或后续配置白名单)
- ✅ 删除 test 数据库及权限
- ✅ 重新加载权限表
💡 若需远程连接(不推荐直接暴露 3306 到公网),请见【进阶配置】部分。
✅ 四、验证安装
# 登录 MySQL(使用新密码)
mysql -u root -p
# 在 MySQL 内执行:
SELECT VERSION(); -- 查看版本
SHOW VARIABLES LIKE 'character_set%'; -- 检查字符集(建议 utf8mb4)
EXIT;
✅ 正常输出即部署成功!
✅ 五、(可选但推荐)基础优化配置
编辑 MySQL 配置文件:
# Ubuntu/Debian
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# CentOS/RHEL
sudo nano /etc/my.cnf
添加/修改以下内容(根据服务器内存调整,例如 2GB 内存):
[mysqld]
# 基础设置
bind-address = 127.0.0.1 # 仅监听本地(安全!)
max_connections = 200
timezone = '+08:00'
# 字符集(关键!避免中文乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB 优化(SSD 推荐)
innodb_buffer_pool_size = 512M # ≈ 总内存 25%~50%
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 1 # 保证 ACID,生产环境勿改 0
# 日志(便于排错)
log_error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
重启生效:
sudo systemctl restart mysql
✅ 六、创建应用数据库与用户(示例)
mysql -u root -p
-- 创建数据库(指定字符集)
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(禁止 root 远程/应用直连!)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
-- 授权(最小权限原则)
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'myapp_user'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
🔐 进阶安全建议(生产环境必做)
| 项目 | 建议 |
|---|---|
| 远程访问 | ❌ 禁止直接开放 3306 到公网;✅ 使用 SSH 隧道 / X_X / 云厂商安全组限制 IP 白名单 |
| 备份 | ✅ 配置每日 mysqldump + cron + 上传至对象存储(如 OSS/S3) |
| 监控 | ✅ 部署 mysql-exporter + Prometheus + Grafana |
| SSL | ✅ 启用 TLS(生成证书,配置 require_secure_transport=ON) |
| 定期更新 | ✅ 订阅 MySQL 安全公告,及时升级补丁 |
🐳 备选方案:Docker 部署(适合测试/快速验证)
# 拉取官方镜像(指定 8.0 版本更稳定)
docker run -d
--name mysql-prod
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=MyRoot123!
-e MYSQL_DATABASE=myapp
-e MYSQL_USER=myapp_user
-e MYSQL_PASSWORD=MyAppPass123!
-v /data/mysql:/var/lib/mysql
-v /etc/localtime:/etc/localtime:ro
--restart=unless-stopped
-d mysql:8.0
# 进入容器配置(如需调优)
docker exec -it mysql-prod mysql -uroot -p
✅ 优势:隔离、易迁移、版本可控;⚠️ 注意数据卷持久化和宿主机时区同步。
❌ 常见错误排查
| 现象 | 解决方法 |
|---|---|
Can't connect to local MySQL server |
检查 systemctl status mysql、netstat -tlnp | grep :3306、SELinux(CentOS)是否阻止:sudo setsebool -P mysqld_connect_any on |
| 中文乱码 | 确认 my.cnf 中 character-set-server=utf8mb4 + 应用连接字符串加 ?charset=utf8mb4 |
| 远程无法连接 | 检查 bind-address 是否为 0.0.0.0(不推荐)、防火墙、云服务器安全组、MySQL 用户 host 是否为 '%'(谨慎授权) |
如需我为你:
- ✅ 生成完整的
my.cnf优化模板(按 1C2G / 2C4G / 4C8G 自动适配) - ✅ 编写自动备份脚本(含压缩、保留7天、微信/邮件通知)
- ✅ 配置 SSL 加密连接教程
- ✅ Docker Compose 部署(含 phpMyAdmin 可视化)
欢迎随时告诉我你的服务器配置(CPU/内存/系统)和具体需求,我会为你定制化输出 👇
祝你部署顺利,数据库稳如磐石! 🚀
云知道CLOUD