在新购的 Linux 云服务器上部署 MySQL 数据库,推荐使用 MySQL 官方 APT/YUM 仓库安装(推荐) 或 Docker 部署(轻量灵活)。以下以主流 Ubuntu/Debian 和 CentOS/RHEL(8+/9)为例,提供安全、生产就绪的完整步骤(含初始化、防火墙、远程访问配置等):
✅ 前置准备(所有系统均需执行)
-
更新系统
# Ubuntu/Debian sudo apt update && sudo apt upgrade -y # CentOS/RHEL 8+/9(使用 dnf) sudo dnf update -y -
设置主机名(可选但推荐)
sudo hostnamectl set-hostname mysql-server echo "127.0.0.1 $(hostname)" | sudo tee -a /etc/hosts -
关闭 SELinux(仅 CentOS/RHEL)
sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
🚀 方式一:官方包安装(推荐用于生产环境)
▶️ Ubuntu/Debian(22.04+)
# 1. 下载并添加 MySQL 官方 GPG 密钥和仓库
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 8.0(回车→OK)
sudo apt update
# 2. 安装 MySQL Server(自动安装客户端、服务端等)
sudo apt install mysql-server -y
# 3. 启动并设为开机自启
sudo systemctl enable mysql
sudo systemctl start mysql
▶️ CentOS/RHEL 8+/9
# 1. 添加 MySQL 官方 YUM 仓库
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{rhel}')-1.noarch.rpm -y
# 2. 确保启用 MySQL 8.0(禁用其他版本如5.7)
sudo dnf config-manager --disable mysql57-community
sudo dnf config-manager --enable mysql80-community
# 3. 安装
sudo dnf install mysql-community-server -y
# 4. 启动并开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld
💡 提示:首次启动后,MySQL 会自动生成临时 root 密码(Ubuntu/Debian 可跳过;CentOS/RHEL 查看日志):
sudo grep 'temporary password' /var/log/mysqld.log # RHEL/CentOS # Ubuntu 默认无临时密码,root 可空密码登录(见下一步初始化)
🔐 步骤二:安全初始化(关键!)
运行交互式安全脚本,设置 root 密码、禁用匿名用户、禁止远程 root 登录等:
sudo mysql_secure_installation
按提示操作(强烈建议):
- Set password for root → ✅ 设置强密码(如
MyPass@2024!) - Remove anonymous users? →
Y - Disallow root login remotely? →
Y(后续如需远程,单独授权用户) - Remove test database? →
Y - Reload privilege tables? →
Y
✅ 完成后,root 仅可通过本地 socket 登录。
🌐 步骤三:配置远程访问(如需从外部连接)
⚠️ 生产环境请严格限制 IP,勿开放
0.0.0.0/0!
1. 修改 MySQL 绑定地址(允许远程连接)
# 编辑配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian
# 或
sudo nano /etc/my.cnf.d/mysql-server.cnf # CentOS/RHEL 8+
# 找到 bind-address 行,改为:
bind-address = 0.0.0.0 # 或指定内网IP(如 10.0.0.5)
# 保存退出
2. 创建专用远程用户(替代 root 远程登录)
sudo mysql -u root -p
在 MySQL 中执行:
-- 创建用户(替换 'myapp' 和 'StrongPass123!')
CREATE USER 'myapp'@'%' IDENTIFIED BY 'StrongPass123!';
-- 授予必要权限(生产环境请最小权限原则,如只给特定数据库)
GRANT ALL PRIVILEGES ON mydb.* TO 'myapp'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- (可选)限制该用户仅从某IP连接
-- CREATE USER 'myapp'@'192.168.1.100' IDENTIFIED BY '...';
3. 配置云服务器防火墙
# Ubuntu (UFW)
sudo ufw allow OpenSSH
sudo ufw allow 3306
sudo ufw enable
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
4. 重启 MySQL 生效
sudo systemctl restart mysql # Ubuntu/Debian
# 或
sudo systemctl restart mysqld # CentOS/RHEL
✅ 验证部署
-
本地连接测试
mysql -u root -p # 输入密码 SELECT VERSION(), USER(), CURRENT_USER(); EXIT; -
远程连接测试(从本地电脑)
mysql -h <你的云服务器公网IP> -u myapp -p -
检查监听状态
ss -tlnp | grep :3306 # 应显示 0.0.0.0:3306 或 [::]:3306
🐳 方式二:Docker 快速部署(开发/测试首选)
# 1. 安装 Docker(略,参考官网)
# 2. 拉取并运行 MySQL 8.0(持久化数据卷)
docker run -d
--name mysql-prod
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=MyRootPass123
-e MYSQL_DATABASE=myappdb
-e MYSQL_USER=myuser
-e MYSQL_PASSWORD=mypass123
-v /opt/mysql/data:/var/lib/mysql
-v /opt/mysql/conf:/etc/mysql/conf.d
--restart=unless-stopped
-d mysql:8.0
# 连接:mysql -h 127.0.0.1 -P 3306 -u myuser -p
✅ 优势:隔离性好、升级方便、无需污染系统;⚠️ 注意:生产环境需配置备份、监控、资源限制。
🛡️ 安全加固建议(生产必做)
- ✅ 使用强密码 + 定期轮换
- ✅ 禁用
local_infile(防止文件读取攻击):SET GLOBAL local_infile = OFF; # 并在 /etc/mysql/my.cnf 中 [mysqld] 下添加: # local_infile = OFF - ✅ 启用 MySQL 8.0+ 默认加密(
default_authentication_plugin = caching_sha2_password) - ✅ 配置慢查询日志 & 错误日志审计
- ✅ 使用 TLS 加密远程连接(生成证书后配置
require_secure_transport=ON) - ✅ 定期备份(
mysqldump或mysqlpump+cron+ 对象存储)
📚 附:常用命令速查
| 功能 | 命令 |
|---|---|
| 查看状态 | sudo systemctl status mysql |
| 日志位置 | /var/log/mysql/error.log(Ubuntu)或 /var/log/mysqld.log(RHEL) |
| 备份数据库 | mysqldump -u root -p mydb > mydb_backup.sql |
| 恢复数据库 | mysql -u root -p mydb < mydb_backup.sql |
| 修改 root 密码 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; |
如需进一步帮助,可告知:
- 你的具体 Linux 发行版及版本(如
cat /etc/os-release) - 是否需要主从复制、读写分离、高可用(MHA/InnoDB Cluster)
- 是否集成监控(Prometheus + Grafana)或备份方案
我可以为你定制完整脚本或 Ansible Playbook 👨💻
需要我帮你生成 一键部署脚本 或 Docker Compose 文件 吗? 😊
云服务器