在新购的 Linux 云服务器上部署 MySQL 数据库,推荐使用 MySQL 官方 APT/YUM 仓库安装(推荐) 或 Docker 方式(轻量灵活)。以下是详细、安全、生产就绪的部署指南(以 Ubuntu 22.04/24.04 或 CentOS 7/8/9 为例,优先以 Ubuntu 24.04 为主):
✅ 一、前期准备(所有系统必做)
-
登录服务器
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/Rocky/AlmaLinux sudo dnf update -y # 或 yum update -y(CentOS 7) sudo dnf install -y curl wget gnupg2 -
配置防火墙(重要!)
# Ubuntu (UFW) sudo ufw enable sudo ufw allow OpenSSH sudo ufw allow from your-ip to any port 3306 # ❗仅允许可信 IP 访问 MySQL 端口(生产环境强烈建议) # 或临时开放(测试用):sudo ufw allow 3306 # CentOS (firewalld) sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-port=3306/tcp --source=YOUR_TRUSTED_IP/32 # 更安全 sudo firewall-cmd --reload
✅ 二、部署 MySQL(推荐方式:官方仓库安装)
⚠️ 不建议
apt install mysql-server(Ubuntu 自带版本较旧且非 Oracle 官方维护),推荐使用 MySQL 官方 APT 仓库 获取最新稳定版(如 8.0.x / 8.4.x)。
▶ 步骤 1:添加 MySQL 官方 APT 仓库(Ubuntu/Debian)
# 下载并安装 MySQL APT 配置包(以 MySQL 8.4 为例,查看最新版:https://dev.mysql.com/downloads/repo/)
cd /tmp
curl -OL https://dev.mysql.com/get/mysql-apt-config_8.4.0-1ubuntu24.04_all.deb
sudo dpkg -i mysql-apt-config_8.4.0-1ubuntu24.04_all.deb
# ⚠️ 安装时会弹出交互界面 → 选择「OK」→ 选中「mysql-8.4」→ 再选「OK」
sudo apt update
▶ 步骤 2:安装 MySQL Server
sudo apt install -y mysql-server
# 安装过程会自动启动 mysqld 并生成 root 密码(见日志),但首次需运行安全脚本
▶ 步骤 3:运行安全初始化(关键!)
sudo mysql_secure_installation
按提示操作:
- ✅ 设置 root 密码(推荐强密码,记录好!)
- ✅ 移除匿名用户(Y)
- ✅ 禁止 root 远程登录(Y)→ 保障安全,后续通过普通用户授权访问
- ✅ 删除 test 数据库(Y)
- ✅ 重新加载权限表(Y)
💡 提示:该命令会生成
/etc/mysql/debian.cnf(含 debian-sys-maint 账户),请勿删除,系统维护需要。
▶ 步骤 4:验证服务状态
sudo systemctl status mysql
# 应显示 active (running)
✅ 三、配置 MySQL(生产级优化)
1️⃣ 修改绑定地址(默认只监听 127.0.0.1,如需远程连接需调整)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到并修改:
# 注释或修改这一行(⚠️ 仅当明确需要远程访问时才放开,且必须配合防火墙限制 IP!)
bind-address = 127.0.0.1
# → 改为(如需监听所有 IPv4):
# bind-address = 0.0.0.0
# 或更安全:指定内网 IP(如 172.16.0.10)
保存后重启:
sudo systemctl restart mysql
2️⃣ 创建专用数据库与用户(✅ 最佳实践!禁止直接用 root 远程操作)
sudo mysql -u root -p
在 MySQL 命令行中执行:
-- 创建数据库(UTF8MB4 推荐)
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(替换 'myuser' 和 'StrongPass123!')
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPass123!';
-- 若需从特定 IP 连接(如应用服务器):
-- CREATE USER 'myuser'@'192.168.1.100' IDENTIFIED BY 'StrongPass123!';
-- 授权(最小权限原则)
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'myuser'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
3️⃣ (可选)启用 MySQL 8 默认身份验证插件兼容性(避免客户端连接报错)
-- 如果应用使用旧版客户端(如某些 PHP PDO),可能需切换认证方式:
ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';
FLUSH PRIVILEGES;
✅ 四、连接测试(本地 & 远程)
-
本地连接测试:
mysql -u myuser -p -D myapp -
远程连接测试(从你本地电脑):
mysql -h your-server-ip -P 3306 -u myuser -p myapp✅ 前提:云服务器安全组已放行 3306 端口 + 本地 IP 已加入防火墙白名单 +
bind-address已正确配置。
✅ 五、【备选方案】Docker 快速部署(适合测试/CI/轻量场景)
# 安装 Docker(如未安装)
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER && newgrp docker
# 启动 MySQL 8.4(数据持久化到宿主机)
sudo docker run -d
--name mysql-prod
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=RootPass123!
-e MYSQL_DATABASE=myapp
-e MYSQL_USER=myuser
-e MYSQL_PASSWORD=MyUserPass123!
-v /opt/mysql/data:/var/lib/mysql
-v /opt/mysql/conf:/etc/mysql/conf.d
-v /opt/mysql/logs:/var/log/mysql
--restart=unless-stopped
-d mysql:8.4
# 查看日志确认启动成功
sudo docker logs mysql-prod
✅ 优势:隔离性强、升级方便、避免污染系统;
⚠️ 注意:生产环境需配置备份策略(mysqldump+ 定时任务 或 Percona XtraBackup)。
✅ 六、重要后续操作(生产必备)
| 项目 | 操作 |
|---|---|
| 🔐 备份策略 | 编写 crontab 定时 mysqldump + 上传至 OSS/S3/异地服务器 |
| 📈 监控 | 安装 mysqltuner 或 Prometheus + mysqld_exporter |
| 🛡️ 安全加固 | 禁用 local_infile、定期审计账户、开启错误日志审计 |
| 📦 应用连接 | 在应用配置中使用 myuser 而非 root,连接字符串示例:jdbc:mysql://ip:3306/myapp?useSSL=false&serverTimezone=UTC |
❌ 常见错误排查
| 现象 | 解决方案 |
|---|---|
Can't connect to local MySQL server |
检查 systemctl status mysql,确认服务运行;检查 bind-address 和 skip-networking |
Access denied for user |
检查用户名@host 是否匹配('user'@'%' ≠ 'user'@'localhost');用 SELECT User,Host FROM mysql.user; 查看 |
Authentication plugin 'caching_sha2_password' cannot be loaded |
执行 ALTER USER ... IDENTIFIED WITH mysql_native_password(见上文) |
| 云服务器连不上 | ✅ 检查:① 云平台安全组(阿里云/腾讯云/AWS)是否放行 3306;② 服务器防火墙(ufw/firewalld);③ MySQL bind-address;④ 用户 host 是否允许该 IP |
需要我为你:
- ✅ 生成一键部署脚本(含备份+监控)?
- ✅ 提供
my.cnf性能优化模板(根据内存自动适配)? - ✅ 配置自动备份到腾讯云 COS / 阿里云 OSS?
- ✅ 演示 Laravel / Django / Spring Boot 的连接配置?
欢迎随时告诉我你的具体环境(OS 版本、云厂商、应用类型),我可以为你定制完整方案 👇
CLOUD技术博