在云服务器上搭建 MySQL 服务器是一个标准且重要的运维任务。由于云服务商(如阿里云、腾讯云、AWS 等)的操作系统通常以 Linux(CentOS/Ubuntu)为主,以下我将以 Ubuntu 22.04 和 CentOS 7/8 为例,提供一套从安装、基础配置到安全加固的完整指南。
第一步:系统准备与更新
无论使用哪种发行版,首先应更新系统包列表,确保软件源是最新的。
Ubuntu/Debian:
sudo apt update && sudo apt upgrade -y
CentOS/RHEL:
sudo yum update -y
# 或者对于较新的版本 (Rocky/Alma)
sudo dnf update -y
第二步:安装 MySQL 数据库
方案 A:使用官方仓库安装(推荐,版本较新)
1. Ubuntu 22.04+
Ubuntu 默认源中通常已包含 MySQL,直接安装即可:
sudo apt install mysql-server -y
注意:安装过程中可能会提示设置 root 密码或选择认证插件(auth_socket),建议初学者选择 mysql_native_password 并设置强密码,或者直接使用 auth_socket(需后续配置 sudo 用户)。
2. CentOS 7/8 / Rocky Linux
需要先下载 MySQL 官方 YUM 仓库配置文件:
# 下载并安装 repo 包
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
# 安装 MySQL Server (默认会安装社区版 8.0)
sudo yum install mysql-server -y
方案 B:使用 Docker 安装(灵活,适合开发测试)
如果你不想污染宿主机环境,Docker 是最快的方式:
docker run --name mysql-container
-e MYSQL_ROOT_PASSWORD=your_strong_password
-p 3306:3306
-d mysql:8.0
第三步:初始化与安全加固(重要)
安装完成后,MySQL 可能尚未完全安全。请运行安全脚本进行初始化。
Ubuntu:
sudo mysql_secure_installation
按提示操作:
- 验证当前 root 密码(如果刚安装过 auth_socket,可跳过)。
- 设置 root 密码(如果之前没设)。
- 移除匿名用户?(Yes)
- 禁止 root 远程登录?(Yes)
- 移除测试数据库?(Yes)
- 重载权限表?(Yes)
CentOS:
CentOS 安装后没有交互式脚本,需要手动进入 MySQL 执行安全命令:
sudo systemctl start mysqld
# 获取临时 root 密码(日志中会有记录)
sudo grep 'temporary password' /var/log/mysqld.log
# 登录并修改密码
mysql -u root -p
进入 SQL 界面后执行:
-- 修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!';
-- 删除匿名用户
DROP USER ''@'localhost';
DROP USER ''@'%';
-- 禁止 root 远程登录
DROP USER 'root'@'%';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!';
-- 删除测试库
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;
EXIT;
第四步:配置远程访问(云服务器核心步骤)
默认情况下,MySQL 只允许本地 (localhost) 连接。要在云服务器上从外部连接,需要做两件事:修改 MySQL 配置 和 配置云防火墙。
1. 修改 MySQL 绑定地址
编辑配置文件:
- Ubuntu:
/etc/mysql/mysql.conf.d/mysqld.cnf - CentOS:
/etc/my.cnf
找到 [mysqld] 部分,注释掉 bind-address = 127.0.0.1,或者直接改为 0.0.0.0:
[mysqld]
bind-address = 0.0.0.0
保存后重启服务:
sudo systemctl restart mysql # Ubuntu
sudo systemctl restart mysqld # CentOS
2. 创建远程用户
在 MySQL 内部创建一个允许特定 IP 或所有 IP 登录的用户(生产环境强烈建议限制 IP):
-- 允许特定 IP 登录 (例如你的办公电脑 IP 192.168.1.100)
CREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.100';
-- 或者允许任意 IP 登录 (仅用于测试,不推荐生产环境)
-- CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPassword123!';
-- GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;
3. 配置云服务器安全组(关键)
登录你的云服务商控制台(阿里云、腾讯云、AWS 等):
- 找到该实例的 安全组 或 防火墙 设置。
- 添加入方向规则:
- 协议:TCP
- 端口:3306
- 授权对象/来源 IP:
- 生产环境:填入你固定的公网 IP 地址。
- 测试环境:可以暂时填
0.0.0.0/0(但风险较高)。
- 保存规则。
第五步:验证连接
在你的本地电脑(非服务器)上使用客户端工具(如 Navicat, DBeaver, 或命令行)尝试连接:
命令行测试:
mysql -h <云服务器公网IP> -u admin -p
输入刚才设置的密码。如果成功进入 mysql> 提示符,说明搭建完成。
💡 最佳实践建议
- 关闭 Root 远程登录:永远不要允许
root用户从%(任意 IP) 登录。创建一个普通管理员账号用于日常维护。 - 使用 SSH 隧道:为了最高安全性,建议不开放 3306 端口到公网,而是通过 SSH 隧道连接:
ssh -L 3306:localhost:3306 user@<云服务器IP>然后本地连接
localhost:3306即可。 - 定期备份:利用云服务器的快照功能,或使用
mysqldump编写定时脚本将数据备份到对象存储(OSS/S3)。 - 监控资源:关注 CPU、内存和磁盘 I/O,防止慢查询拖垮服务器。
按照以上步骤,你就可以拥有一台安全、可用的云服务器 MySQL 数据库了。如果有具体的报错信息或特殊的业务需求,欢迎继续提问!
CLOUD云