在新购的 Linux 云服务器上部署 MySQL 数据库,需兼顾安全性、稳定性与可维护性。以下是基于主流发行版(如 Ubuntu 22.04/24.04 或 CentOS/RHEL 8/9)的生产推荐流程(以 MySQL 官方社区版为例),包含关键安全加固步骤:
✅ 一、前期准备(登录服务器后必做)
# 1. 更新系统(Ubuntu/Debian)
sudo apt update && sudo apt upgrade -y
# 或 CentOS/RHEL(启用 EPEL + dnf)
sudo dnf update -y
sudo dnf install epel-release -y # RHEL/CentOS 8+
⚠️ 注意:云服务器请先配置好安全组/防火墙规则(开放
3306端口仅限可信 IP,或默认关闭,后续通过 SSH 隧道访问更安全)
✅ 二、安装 MySQL(推荐官方 APT/YUM 源,非系统默认旧版本)
▶ 方式1:Ubuntu/Debian(使用 MySQL 官方仓库)
# 下载并安装 MySQL APT 配置工具(获取最新稳定版,如 8.0/8.4)
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 8.0(或 8.4)
sudo apt update
sudo apt install mysql-server -y
▶ 方式2:CentOS/RHEL(使用 MySQL 官方 YUM 仓库)
# 下载并安装 MySQL YUM repo
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{rhel}')-1.noarch.rpm
sudo dnf install mysql-community-server -y
✅ 优势:获得官方支持、及时安全更新、完整功能(如
caching_sha2_password认证插件)
✅ 三、启动并启用服务
sudo systemctl start mysqld # RHEL/CentOS
# 或
sudo systemctl start mysql # Ubuntu/Debian
sudo systemctl enable mysqld # 开机自启
sudo systemctl status mysql # 检查状态(应为 active (running))
✅ 四、运行安全初始化(关键!)
sudo mysql_secure_installation
按提示操作(强烈建议):
- ✅ 设置 root 密码(强密码,记录保存)
- ✅ 移除匿名用户(
Remove anonymous users? [Y]→Y) - ✅ 禁止 root 远程登录(
Disallow root login remotely? [Y]→Y) - ✅ 删除 test 数据库(
Remove test database and access to it? [Y]→Y) - ✅ 重载权限表(
Reload privilege tables now? [Y]→Y)
🔒 此步极大降低被爆破/未授权访问风险!
✅ 五、配置 MySQL(关键安全与性能设置)
编辑主配置文件(路径因发行版略有不同):
# Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf
# RHEL/CentOS: /etc/my.cnf 或 /etc/my.cnf.d/mysql-server.cnf
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 段添加/修改以下内容:
[mysqld]
# —— 安全加固 ——
bind-address = 127.0.0.1 # ❗仅监听本地(禁止公网暴露!)
# skip-networking = ON # (可选)完全禁用TCP,仅Socket通信
default-authentication-plugin = caching_sha2_password
require_secure_transport = ON # 强制SSL连接(需后续配置证书)
# —— 基础优化 ——
max_connections = 200
innodb_buffer_pool_size = 512M # 根据内存调整(建议总内存50%-70%)
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
✅ 保存后重启:
sudo systemctl restart mysql
✅ 六、创建应用专用数据库与用户(禁止用 root 连接业务)
sudo mysql -u root -p
在 MySQL 内执行:
-- 创建数据库(指定字符集)
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(限制来源IP,如仅允许内网或特定IP)
CREATE USER 'myapp_user'@'127.0.0.1' IDENTIFIED BY 'StrongPass!2024';
-- 授予最小必要权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp_user'@'127.0.0.1';
-- 刷新权限
FLUSH PRIVILEGES;
-- (可选)若需远程访问(不推荐),改为:
-- CREATE USER 'myapp_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass!2024';
-- GRANT ... ON myapp_db.* TO 'myapp_user'@'192.168.1.%';
🛡️ 原则:
- 永远不用
root@'%';- 用户只授
localhost或内网 IP;- 权限按需授予(避免
GRANT ALL)。
✅ 七、验证连接与基础测试
# 本地测试(使用新用户)
mysql -u myapp_user -p -h 127.0.0.1 myapp_db
# 查看字符集是否生效
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
✅ 八、(进阶)启用 SSL(生产环境强烈推荐)
-- 在 MySQL 中检查 SSL 状态
SHOW VARIABLES LIKE '%ssl%';
-- 若 ssl_mode=DISABLED,则需生成证书并配置(参考 MySQL 官方文档)
✨ 提示:云厂商(如阿里云RDS、腾讯云CDB)已内置 SSL,自建需额外配置。
✅ 九、备份策略(上线前必须规划!)
# 示例:每日自动备份(加入 crontab)
0 2 * * * /usr/bin/mysqldump -u myapp_user -p'YourPass' --databases myapp_db | gzip > /backup/myapp_db_$(date +%F).sql.gz
# 安全建议:备份文件权限设为 600,目录 700,并异地存储
⚠️ 重要提醒(避坑指南)
| 风险点 | 正确做法 |
|---|---|
❌ 直接开放 3306 到公网 |
✅ 用 SSH 隧道或云内网/VPC 连接;或通过 Nginx 反向X_X + 认证(不推荐) |
| ❌ 使用弱密码或空密码 | ✅ 用 openssl rand -base64 16 生成强密码 |
❌ 不改 bind-address |
✅ 必须设为 127.0.0.1 或内网 IP,禁用 0.0.0.0 |
| ❌ 忽略防火墙 | ✅ ufw allow OpenSSH + ufw deny 3306(Ubuntu)或 firewall-cmd --permanent --remove-port=3306/tcp(RHEL) |
❌ 用 root 连接业务程序 |
✅ 应用配置中使用专用低权限账号 |
✅ 十、后续运维建议
- ✅ 定期
sudo apt update && sudo apt upgrade mysql-server(保持安全更新) - ✅ 监控磁盘空间(
/var/lib/mysql)、慢查询日志、错误日志 - ✅ 使用
mysqltuner.pl分析性能瓶颈 - ✅ 考虑高可用:主从复制、ProxySQL、或直接选用云厂商托管数据库(RDS)
需要我为你:
- ✅ 生成完整的
my.cnf配置模板(适配 2G/4G/8G 内存)? - ✅ 编写一键部署脚本(含安全加固)?
- ✅ 演示如何配置主从复制?
- ✅ 教你用 Docker 部署 MySQL(隔离更优)?
欢迎随时告诉我你的具体场景(如:服务器配置、业务类型、是否需网络访问等),我会为你定制化方案 👇
CLOUD云计算