在新购的 Linux 云服务器(如 CentOS/RHEL 8/9、Ubuntu 22.04/24.04 等)上部署 MySQL 数据库,需兼顾安全性、稳定性与生产可用性。以下是清晰、分步、推荐的部署流程(以主流发行版为例,重点说明关键注意事项):
✅ 一、前期准备(重要!)
-
确认系统环境
# 查看系统信息(决定安装方式) cat /etc/os-release uname -r⚠️ 注意:
- 避免使用
mysql(Oracle 官方 MySQL)和mariadb混淆;生产推荐 MySQL Community Server(官方版) 或 Percona Server(增强版)。 - Ubuntu/Debian 默认仓库的
mysql-server包实为 MariaDB(兼容但非 MySQL),需手动添加 Oracle 官方源。
- 避免使用
-
更新系统 & 安装基础工具
# Ubuntu/Debian sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget gnupg2 lsb-release # CentOS/RHEL 8+ sudo dnf update -y sudo dnf install -y curl wget gnupg2 -
配置防火墙(开放 MySQL 端口)
# Ubuntu (UFW) sudo ufw allow OpenSSH sudo ufw allow 3306 # 生产环境建议限制 IP:sudo ufw allow from 192.168.1.100 to any port 3306 sudo ufw enable # CentOS/RHEL (firewalld) sudo firewall-cmd --permanent --add-service=mysql # 或更安全:仅允许特定IP # sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' sudo firewall-cmd --reload
✅ 二、安装 MySQL(推荐官方 APT/YUM 源 —— 安全 + 最新版)
▶ 方式1:Ubuntu/Debian(Oracle 官方 MySQL)
# 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 -y mysql-server
# 3. 启动并设开机自启
sudo systemctl enable mysql
sudo systemctl start mysql
▶ 方式2:CentOS/RHEL 8+(MySQL YUM Repository)
# 1. 添加官方 MySQL YUM 源
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-5.noarch.rpm
# 2. 可选:禁用其他 MySQL 模块(避免冲突)
sudo dnf module reset mysql
sudo dnf module enable mysql:8.0
# 3. 安装
sudo dnf install -y mysql-community-server
# 4. 启动
sudo systemctl enable mysqld
sudo systemctl start mysqld
✅ 验证安装:
mysql --version # 应显示 MySQL 8.0.x sudo systemctl status mysqld # 确保 active (running)
✅ 三、初始化安全配置(关键!必须执行)
MySQL 8.0+ 安装后会生成临时密码,首次登录需重置:
# 1. 查看临时 root 密码(RHEL/CentOS 在 /var/log/mysqld.log;Ubuntu 在 /var/log/mysql/error.log)
sudo grep 'temporary password' /var/log/mysqld.log # RHEL
# 或
sudo grep 'temporary password' /var/log/mysql/error.log # Ubuntu
# 2. 登录 MySQL(输入临时密码)
mysql -u root -p
# 3. 【强烈推荐】立即运行安全向导(交互式加固):
mysql> EXIT;
sudo mysql_secure_installation
✅ 向导中务必选择:
Y设置强 root 密码(符合策略:8位+大小写字母+数字+特殊字符)Y移除匿名用户Y禁止 root 远程登录(生产环境默认只允许 localhost)Y删除 test 数据库及访问权限Y重载权限表
💡 若需远程管理(不推荐直接开 root 远程):后续创建专用账号并授权(见第五步)
✅ 四、配置 MySQL(优化 & 安全)
编辑主配置文件(路径因系统而异):
# Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf
# RHEL/CentOS: /etc/my.cnf 或 /etc/my.cnf.d/mysql-server.cnf
sudo nano /etc/my.cnf
📌 关键配置项(追加到 [mysqld] 段):
[mysqld]
# 基础
bind-address = 127.0.0.1 # 🔒 仅监听本地(生产必须!如需远程,改为 0.0.0.0 并配合防火墙/IP白名单)
port = 3306
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 安全强化(MySQL 8.0+)
default_authentication_plugin = caching_sha2_password
require_secure_transport = ON # 强制 SSL 连接(需配置证书,进阶可选)
# 日志(便于排错)
log-error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# InnoDB 优化(根据内存调整)
innodb_buffer_pool_size = 1G # 推荐:物理内存的 50%~75%
✅ 保存后重启服务:
sudo systemctl restart mysqld
# Ubuntu 用户注意:可能需先创建日志目录
sudo mkdir -p /var/log/mysql && sudo chown mysql:mysql /var/log/mysql
✅ 五、创建应用数据库与用户(生产最佳实践)
mysql -u root -p
-- 1. 创建数据库(指定字符集)
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 2. 创建专用用户(❌ 不用 root 连接应用!)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
-- 3. 授予最小必要权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp_user'@'localhost';
-- 4. 【如需远程连接】(仅限可信内网或跳板机,且需防火墙限制)
-- CREATE USER 'myapp_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
-- GRANT ... ON myapp_db.* TO 'myapp_user'@'192.168.1.%';
-- 5. 刷新权限
FLUSH PRIVILEGES;
-- 6. 退出
EXIT;
✅ 六、验证连接(本地测试)
# 使用新用户登录
mysql -u myapp_user -p -D myapp_db
# 测试建表
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'Hello MySQL');
SELECT * FROM test_table;
✅ 七、【可选】启用远程访问(谨慎!)
若应用服务器与 DB 不在同一机器:
- 修改
bind-address = 0.0.0.0(⚠️ 配合防火墙严格限制源 IP!) - 创建带
%或具体 IP 的用户(如'user'@'10.0.1.5') - 开放防火墙端口(仅允许可信 IP):
# Ubuntu UFW sudo ufw allow from 10.0.1.5 to any port 3306 # RHEL firewalld sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.1.5" port port="3306" protocol="tcp" accept' sudo firewall-cmd --reload - 强烈建议:应用连接使用 SSL 加密(配置
require_secure_transport=ON+ 证书)
🚫 常见错误规避指南
| 问题 | 解决方案 |
|---|---|
Can't connect to local MySQL server |
检查 systemctl status mysqld、bind-address、SELinux(RHEL:sudo setsebool -P mysqld_connect_any on) |
Access denied for user 'root'@'localhost' |
用临时密码登录,或重置密码(MySQL 官方重置指南) |
Authentication plugin 'caching_sha2_password' cannot be loaded |
客户端不支持?升级客户端,或创建用户时指定 IDENTIFIED WITH mysql_native_password(不推荐降级安全) |
✅ 后续建议(生产就绪)
- ✅ 备份策略:配置
mysqldump定时备份 +mysqlbinlog增量备份 - ✅ 监控:部署
Prometheus + mysqld_exporter或Percona Monitoring and Management (PMM) - ✅ 高可用:单机够用?未来考虑 MySQL Group Replication / InnoDB Cluster
- ✅ SSL 加密:生成证书并启用(
require_secure_transport=ON) - ✅ 定期更新:
sudo apt update && sudo apt upgrade mysql-server(注意大版本升级需迁移)
需要我为你:
- ✍️ 生成完整的自动化部署脚本(Bash)?
- 📄 提供
my.cnf完整配置模板(按 2G/4G 内存优化)? - 🔐 指导如何配置 MySQL SSL 加密连接?
- 🐳 演示 Docker 方式部署(轻量测试场景)?
欢迎随时告诉我你的具体环境(系统版本、内存、用途),我会为你定制方案! 🌟
CLOUD云枢