在新购的 Linux 云服务器(如 Ubuntu/CentOS)上部署 MySQL 数据库,需兼顾安全性、稳定性与生产可用性。以下是清晰、分步、推荐的部署指南(以 Ubuntu 22.04/24.04 或 CentOS 9/RHEL 9 为主,兼容主流云平台如阿里云、腾讯云、AWS):
✅ 一、前期准备(务必执行)
-
更新系统
# Ubuntu/Debian sudo apt update && sudo apt upgrade -y # CentOS/RHEL/Rocky/AlmaLinux sudo dnf update -y # 或 yum update -y(旧版) -
配置防火墙(开放 MySQL 端口)
# Ubuntu(ufw) sudo ufw allow OpenSSH sudo ufw allow 3306 # 仅限内网或加IP限制更安全(见下文) sudo ufw enable # CentOS(firewalld) sudo firewall-cmd --permanent --add-service=mysql # 或更安全:仅允许特定IP(如你的办公IP) # sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="3306" protocol="tcp" accept' sudo firewall-cmd --reload -
(强烈建议)禁用 root 远程登录 & 使用非默认端口(可选但推荐)
→ 后续在 MySQL 配置中设置bind-address = 127.0.0.1(仅本地访问),通过 SSH 隧道或应用服务器同VPC内网连接,避免公网暴露 3306 端口。
✅ 二、安装 MySQL(推荐官方 APT/YUM 源,非系统默认 mariadb)
▶ 方式1:安装 Oracle 官方 MySQL(推荐,功能完整、更新及时)
✅ 支持 MySQL 8.0+(含角色管理、组件化、更强安全策略)
-
Ubuntu/Debian:
# 下载并安装 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 8.0 sudo apt update sudo apt install mysql-server -y -
CentOS/RHEL 9+:
# 启用 MySQL 8.0 模块(RHEL/CentOS 9+ 默认提供) sudo dnf module reset mysql sudo dnf module enable mysql:8.0 sudo dnf install mysql-server -y⚠️ 若需最新版(如 8.3),可添加官方 YUM 仓库:https://dev.mysql.com/downloads/repo/
▶ 方式2:使用系统默认包(快速但版本较旧)
# Ubuntu(通常为 8.0.x,可接受)
sudo apt install mysql-server -y
# CentOS 9+(同上,已含 8.0)
sudo dnf install mysql-server -y
✅ 安装完成后,MySQL 服务会自动启动并启用开机自启。
✅ 三、首次安全加固(关键!)
运行官方安全脚本(自动禁用危险默认项):
sudo mysql_secure_installation
按提示操作(强烈建议):
- 设置 root 密码(选择
strong策略,或自定义复杂密码) - 移除匿名用户 →
Y - 禁止 root 远程登录 →
Y(保持localhost可用) - 删除 test 数据库 →
Y - 重载权限表 →
Y
🔐 此后
root@localhost仅可通过sudo mysql或mysql -u root -p本地登录。
✅ 四、配置 MySQL(重要:编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
修改关键项(根据云服务器配置调整):
[mysqld]
# 1. 绑定地址:禁止公网暴露(生产必备!)
bind-address = 127.0.0.1 # 仅本地;如需内网其他机器访问,改为内网IP(如 172.16.0.5)
# 2. 字符集(避免中文乱码)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 3. 日志(可选,便于排错)
log-error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# 4. 性能调优(示例:4GB内存云服务器)
innodb_buffer_pool_size = 1G # 推荐设为物理内存50%~75%
max_connections = 200
✅ 保存后重启服务:
sudo systemctl restart mysql
sudo systemctl enable mysql # 开机自启
验证状态:
sudo systemctl status mysql # 应显示 active (running)
sudo ss -tlnp | grep :3306 # 确认监听地址
✅ 五、创建业务用户与数据库(替代 root 操作)
# 登录 MySQL(仅限本地)
sudo mysql -u root -p
# 在 MySQL 中执行:
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'myuser'@'localhost';
-- 如需从内网其他服务器连接(如应用服务器),替换 localhost:
-- CREATE USER 'myuser'@'172.16.0.10' IDENTIFIED BY 'StrongPass123!';
FLUSH PRIVILEGES;
EXIT;
✅ 测试连接:
mysql -u myuser -p -D myapp
✅ 六、(可选但推荐)启用远程访问(仅当必要且安全可控)
❗不建议直接开放 3306 到公网!优先使用:
- SSH 隧道(开发/管理):
ssh -L 3307:127.0.0.1:3306 user@your-server-ip- 云平台安全组:仅放行可信内网 IP 或跳板机 IP
- MySQL Router / ProxySQL:生产级X_X方案
若确需配置:
- 修改
bind-address = 0.0.0.0(⚠️风险!) - 创建用户时指定
'myuser'@'%'或具体 IP - 云服务器控制台 安全组/防火墙 仅放行指定 IP 的 3306 端口
- 启用 MySQL SSL(官方文档)
✅ 七、备份策略(生产环境必须)
# 示例:每日凌晨2点全量备份(保留7天)
sudo crontab -e
# 添加:
0 2 * * * /usr/bin/mysqldump -u myuser -p'YourPass' --all-databases | gzip > /backup/mysql-$(date +%F).sql.gz && find /backup -name "mysql-*.sql.gz" -mtime +7 -delete
✅ 更推荐:
mydumper(多线程)、Percona XtraBackup(热备 InnoDB)
✅ 八、验证与后续
- ✅ 应用连接测试(使用
myuser账号) - ✅ 查看错误日志:
sudo tail -f /var/log/mysql/error.log - ✅ 监控:安装
mysqltuner(wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl && perl mysqltuner.pl) - ✅ 生产建议:
- 使用
systemd管理服务 - 配置
logrotate管理慢日志/错误日志 - 定期
mysqlcheck检查表健康
- 使用
🚫 常见错误规避
| 问题 | 解决方案 |
|---|---|
Can't connect to local MySQL server |
检查 systemctl status mysql、bind-address、/var/run/mysqld/mysqld.sock 权限 |
| 中文乱码 | 确保 utf8mb4 在 [client]、[mysqld]、建库建表时三处统一 |
| 远程拒绝连接 | 检查:MySQL 用户 host、防火墙、云平台安全组、skip-networking 是否被启用 |
需要我为你:
- ✅ 生成完整的
my.cnf优化模板(按 2C4G/4C8G 云服务器)? - ✅ 提供 Docker 部署 MySQL 8.0 的
docker-compose.yml? - ✅ 编写自动化部署 Shell 脚本(一键安装+安全加固)?
- ✅ 配置主从复制或高可用(MHA/InnoDB Cluster)?
欢迎随时告诉我你的具体环境(OS 版本、云厂商、用途:开发/生产/学习),我会为你定制方案 👇
云知识CLOUD