在云服务器上安装 MySQL,并没有一个放之四海而皆准的“标准答案”,因为它高度依赖于你选择的操作系统版本、业务场景以及你对运维复杂度的承受能力。
作为在一线摸爬滚打多年的开发者/运维,我通常会把方案分为三类:极简云托管版、传统源码/包管理安装版、以及容器化部署版。下面我从实战角度,把最常用且坑最少的路径拆解给你看。
一、 先做决策:你该选哪种方式?
- 如果你不想折腾运维(推荐新手或中小项目)
- 方案:直接使用云厂商提供的 RDS(如阿里云 RDS、腾讯云 CDB)。
- 理由:自动备份、高可用主从、监控报警全都有。虽然贵一点,但省下的排查故障时间远超那点钱。
- 如果你想省钱且掌握完全控制权(个人博客、测试环境、初创公司核心业务)
- 方案:在 ECS/CVM 上手动安装 MySQL Community Edition。
- 理由:免费、灵活、可深度调优。这也是本文重点讲解的内容。
- 如果你追求标准化和快速交付(微服务架构、CI/CD 流程中)
- 方案:Docker + MySQL 镜像。
- 理由:环境一致性最好,迁移方便,不会污染宿主机系统库。
二、 主流 Linux 发行版的“裸机”安装指南
假设你有一台纯净的 CentOS 7/8、Ubuntu 20.04/22.04 或 Debian 服务器。
1. Ubuntu/Debian 系列(APT 包管理)
Ubuntu 默认源里的 MySQL 版本可能较老,建议添加官方 Yum/Apt 源以获取最新稳定版(目前主流是 8.0+)。
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装依赖(如果需要下载 GPG key)
sudo apt install software-properties-common dirmngr apt-transport-https -y
# 3. 添加 MySQL APT Repository (以 Ubuntu 为例)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
# 注意:此时会弹出一个交互界面,选择 MySQL Server 8.0,确认即可
# 4. 再次更新并安装
sudo apt update
sudo apt install mysql-server -y
# 5. 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
关键点: Ubuntu 默认使用 auth_socket 插件进行 root 认证,这意味着你不需要密码就能通过本地 socket 登录 root。这在开发环境很方便,但在生产环境需改为 mysql_native_password 或 caching_sha2_password 并设置强密码。
2. CentOS/RHEL 系列(YUM/DNF 包管理)
CentOS 7 比较特殊,默认仓库没有 MySQL,需要手动添加 repo。CentOS 8 及以上已转向 MariaDB 或需要额外配置。
# 1. 下载 MySQL YUM Repository
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 2. 安装 Repo
sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm
# 3. 验证是否启用正确版本
sudo yum repolist enabled | grep "mysql.*-community.*"
# 4. 安装 MySQL Server
sudo yum install mysql-community-server -y
# 5. 启动服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
关键点: MySQL 8.0 在安装过程中会在 /var/log/mysqld.log 生成一个临时随机密码。务必执行以下命令查看并记录:
sudo grep 'temporary password' /var/log/mysqld.log
拿到密码后,首次登录必须修改密码:
mysql -u root -p
# 输入临时密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword123!';
三、 安装后的“保命”配置清单
装好只是第一步,不配置好等于裸奔。以下是生产环境必须做的几件事:
1. 安全加固(Security Hardening)
执行 mysql_secure_installation 脚本(Linux 下通常会自动引导或手动运行):
- VALIDATE PASSWORD COMPONENT:开启密码强度校验,拒绝弱口令。
- Remove anonymous users:删除匿名用户。
- Disallow root login remotely:严禁允许 root 远程登录!这是被爆破的最高频入口。
- Remove test database:删除测试数据库。
- Reload privilege tables:刷新权限表。
2. 网络与防火墙配置
云服务器默认只开放 22 (SSH) 端口。你需要在云控制台的安全组(Security Group)中放行 3306 端口。
- 高危操作:直接对
0.0.0.0/0开放 3306 端口。(除非你是XX或有其他安全措施,否则极易被扫描到并遭受勒索加密攻击。) - 正确做法:
- 如果应用在同一台服务器:无需开放 3306,使用 localhost 连接。
- 如果应用在其他服务器:仅允许特定应用服务器的私有 IP 访问 3306 端口。
- 如果必须公网访问(极少情况):修改 MySQL 配置文件
my.cnf中的bind-address为0.0.0.0,并在 MySQL 内部创建专门用于远程连接的账号,限制其 host 为特定 IP 段。
3. 字符集与时区配置
避免乱码和时区偏差导致的诡异 Bug。编辑 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone = '+08:00' # 根据实际时区调整
重启服务生效:sudo systemctl restart mysql
4. 性能基础调优(针对小内存服务器)
很多云服务器内存只有 1G 或 2G,MySQL 默认配置可能会 OOM(内存溢出)。
在 my.cnf 中调整关键参数:
[mysqld]
# 根据物理内存调整,一般建议为总内存的 50%-70%
innodb_buffer_pool_size = 1G
# 关闭不必要的日志,提升写入性能(若数据量不大可忽略)
# log_bin = off
四、 Docker 方式(更现代的玩法)
如果你熟悉 Docker,这是最干净的安装方式,尤其适合多实例共存或频繁重装的场景。
# 1. 拉取镜像
docker pull mysql:8.0
# 2. 运行容器
docker run -d
--name mysql-prod
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=YourStrongPassword123!
-v /data/mysql:/var/lib/mysql
-v /etc/mysql/conf.d:/etc/mysql/conf.d
mysql:8.0
优势:
- 数据持久化在宿主机的
/data/mysql,容器销毁重建不丢数据。 - 配置文件挂载,修改方便。
- 随时可以
docker stop/start或替换版本。
五、 常见踩坑与避坑指南
-
忘记密码怎么办?
- 停止 MySQL 服务。
- 以跳过权限表方式启动:
mysqld_safe --skip-grant-tables & - 登录 MySQL,执行
FLUSH PRIVILEGES;然后重置密码。 - 警告:此方法有风险,仅限紧急情况,修复后务必重启正常模式。
-
连接报错
Client does not support authentication protocol- 这是 MySQL 8.0 默认使用
caching_sha2_password而旧版客户端不支持导致的。 - 解决:修改用户认证方式:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;
- 这是 MySQL 8.0 默认使用
-
中文乱码
- 检查数据库、表、字段三个层级的字符集是否都为
utf8mb4。 - 检查 JDBC 连接串是否添加了
?useUnicode=true&characterEncoding=UTF-8。
- 检查数据库、表、字段三个层级的字符集是否都为
-
云服务器磁盘 IO 瓶颈
- MySQL 是 IO 密集型应用。如果感觉慢,检查云盘的 IOPS 上限。如果是高并发场景,考虑将数据盘单独挂载并使用 SSD 云盘。
总结
对于大多数国内云服务器用户:
- 求稳、求省心 -> 买云厂商 RDS。
- 学习、低成本建站 -> Ubuntu/CentOS 原生安装,配好安全组和密码策略。
- DevOps、微服务 -> Docker 部署。
无论哪种方式,定期备份(逻辑备份 mysqldump 或物理备份 XtraBackup)永远是最后的安全底线。不要相信任何“永久不坏”的承诺。
云技术博客