在云服务器(ECS/CVM/Lighthouse 等)上手动安装 MySQL,核心在于源码编译安装或二进制包安装。虽然大多数用户直接使用 apt/yum 安装官方预编译包(如 yum install mysql-server),但“手动安装”通常意味着更深层的控制、性能调优或特定版本需求。
以下以 CentOS 7/8 (RHEL系) 和 Ubuntu 20.04+ (Debian系) 为例,提供两种主流“手动”路径:方案一:使用官方二进制包(推荐,稳定高效);方案二:源码编译安装(极致定制,适合高阶场景)。强烈建议优先选择方案一,除非你有特殊依赖需求。
✅ 方案一:使用官方二进制包安装(推荐)
这是最接近“手动控制”且生产环境常用的方式,比源码快,比包管理器更透明。
📌 步骤概览(以 CentOS 7 + MySQL 8.0 为例)
1. 下载官方二进制包
# 访问 https://dev.mysql.com/downloads/mysql/ 获取链接
# 或使用 wget 直接下载(示例为 MySQL 8.0.35 for Linux Generic)
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz
2. 解压并移动到指定目录
tar -xvf mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz
mv mysql-8.0.35-linux-glibc2.17-x86_64 /usr/local/mysql
3. 创建用户和组(安全最佳实践)
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
4. 初始化数据库
cd /usr/local/mysql
mkdir -p /data/mysql/data # 数据目录,建议单独挂载云盘
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql/data
# 初始化(生成 root 临时密码!务必记录)
./bin/mysqld --initialize --user=mysql --datadir=/data/mysql/data --basedir=/usr/local/mysql
⚠️ 注意:输出末尾会显示类似
A temporary password is generated for root@localhost: xxxxxx,请复制保存。
5. 配置 systemd 服务(实现开机自启)
创建文件 /etc/systemd/system/mysql.service:
[Unit]
Description=MySQL Server
Documentation=https://dev.mysql.com/doc/
Requires=network.target
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --daemonize
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
重载 systemd 并启动:
systemctl daemon-reload
systemctl enable mysql
systemctl start mysql
6. 修改 root 密码 & 远程访问配置
# 登录(使用初始临时密码)
/usr/local/mysql/bin/mysql -u root -p
# 进入 SQL 后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
FLUSH PRIVILEGES;
# 允许远程连接(根据业务需求谨慎开放)
CREATE USER 'root'@'%' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
7. 配置环境变量(可选)
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
8. 安全加固(关键!)
- 删除测试库和匿名账户:
DROP DATABASE test; DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES; - 修改
my.cnf绑定 IP:[mysqld] bind-address = 0.0.0.0 # 或指定内网IP如 10.0.0.10 - 重启服务生效:
systemctl restart mysql
9. 云厂商安全组配置
登录阿里云/AWS/腾讯云控制台 → 找到实例 → 安全组规则 → 入方向 添加 TCP 3306 端口,源 IP 限制为你的客户端 IP 或 CIDR(避免暴露给全网)。
✅ 方案二:源码编译安装(高阶)
适用于需要自定义存储引擎、优化器参数或兼容老旧系统的场景。
📌 前置依赖(CentOS)
yum install -y gcc gcc-c++ make cmake ncurses-devel openssl-devel bison git libaio-devel
📌 步骤概览
1. 下载源码
git clone https://github.com/mysql/mysql-server.git -b mysql-8.0
cd mysql-server
2. 配置 CMake
mkdir build
cd build
cmake ..
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysql/data
-DSYSCONFDIR=/etc
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
-DMYSQL_TCP_PORT=3306
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DENABLED_LOCAL_INFILE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8mb4
-DDEFAULT_COLLATION=utf8mb4_unicode_ci
3. 编译安装
make -j$(nproc) # 多核提速
make install
后续步骤同【方案一】第3~9步(创建用户、初始化、配置service等)。
💡 提示:源码编译耗时较长(可能数小时),仅建议在确有定制需求时使用。
🔧 通用运维与排错指南
📁 关键配置文件位置
my.cnf或/etc/my.cnf:主配置/etc/my.cnf.d/server.cnf:部分发行版拆分配置- 数据目录:默认
/var/lib/mysql,我们自定义为/data/mysql/data
🛠 常见错误及解决
| 错误现象 | 原因 | 解决方案 |
|---|---|---|
Can't connect to local MySQL server through socket '/tmp/mysql.sock' |
服务未启动或 sock 路径不对 | 检查 systemctl status mysql;确认 mysql.conf 中 socket= 指向正确路径 |
Access denied for user 'root'@'localhost' |
密码错误或权限未刷新 | 使用 --skip-grant-tables 启动重置密码(危险!仅限紧急恢复) |
InnoDB: Unable to lock ./ibdata1 error: 11 |
多个 MySQL 进程冲突或权限问题 | 确保只有一个 mysqld 运行;检查 /data/mysql/data 属主是否为 mysql |
| 网络无法连接 | 安全组/防火墙拦截 | 检查云控制台安全组 + 本地 iptables/firewalld 是否放行 3306 |
📈 性能调优建议(针对云服务器)
- innodb_buffer_pool_size:设为物理内存的 50%~70%(单实例原则)
- max_connections:根据并发量调整,避免过大导致 OOM
- log_bin:开启 binlog 用于备份与主从复制
- slow_query_log:开启慢查询日志,定期分析
- 使用 SSD 云盘:IOPS 对 MySQL 性能影响巨大
🔄 备份策略
# 每日全备脚本示例
mysqldump -u root -p'YourPassword' --all-databases --single-transaction --flush-logs > /backup/mysql_full_$(date +%F).sql
gzip /backup/mysql_full_*.sql
# 结合 crontab 定时执行,并上传至 OSS/S3 冷存储
❗ 合规与安全提醒
- 不要将 root 密码硬编码在代码或配置文件中,使用
.env或密钥管理服务(如 AWS Secrets Manager、阿里云 KMS)。 - 禁用远程 root 登录是基本安全准则,应用应使用专用低权限账户。
- 定期更新 MySQL 版本,关注 CVE 漏洞公告(如 MySQL Security Advisories)。
- 启用 TLS/SSL 加密传输,尤其在跨可用区或公网通信时。
- 遵循最小权限原则:为每个应用分配独立数据库和用户,仅授予必要权限。
🆚 为什么不用 yum/apt install?
| 维度 | yum/apt 安装 | 二进制/源码安装 |
|---|---|---|
| 安装速度 | 快(分钟级) | 慢(尤其源码) |
| 版本灵活性 | 受限于仓库版本 | 可任意版本 |
| 自定义程度 | 低 | 高(路径、插件、优化器) |
| 维护复杂度 | 低(自动更新) | 高(需手动打补丁) |
| 适用场景 | 开发测试、标准生产 | 高性能要求、特殊依赖、审计需求 |
✅ 对于绝大多数云服务器用户,推荐使用官方 YUM/APT 源安装最新版 MySQL,并通过
my.cnf调优。只有在明确需要非标准路径、旧版本或特定功能模块时,才考虑手动二进制/源码安装。
如需进一步帮助(如主从复制搭建、高可用架构设计、监控告警集成),可提供具体场景继续深入。
CLOUD云枢