如何在云服务器上手动安装和配置MySQL?

在云服务器(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

📈 性能调优建议(针对云服务器)

  1. innodb_buffer_pool_size:设为物理内存的 50%~70%(单实例原则)
  2. max_connections:根据并发量调整,避免过大导致 OOM
  3. log_bin:开启 binlog 用于备份与主从复制
  4. slow_query_log:开启慢查询日志,定期分析
  5. 使用 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云枢 » 如何在云服务器上手动安装和配置MySQL?