6.2.3 安装方式对比:YUM/APT、二进制、源码

安装方式对比:YUM/APT、二进制、源码#

总体对比维度(简表)
- 便捷性:YUM/APT > 二进制 > 源码
- 版本可控性:源码 ≈ 二进制 > YUM/APT
- 运维成本:YUM/APT最低,源码最高
- 适用场景:生产常用二进制与YUM/APT,源码多用于定制与学习

原理草图(安装链路)

文章图片

1)YUM/APT 包管理安装#

适用:标准化环境、快速交付、版本无需强控制
示例(CentOS/RHEL)

# 1. 安装官方仓库
sudo rpm -ivh https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm

# 2. 查看可用版本
yum list mysql-community-server --showduplicates | tail -n 5

# 3. 安装
sudo yum -y install mysql-community-server

# 4. 启动并设为开机自启
sudo systemctl enable --now mysqld

# 5. 获取临时root密码
sudo grep 'temporary password' /var/log/mysqld.log

命令解释
- mysql80-community-release:引入官方YUM仓库
- mysql-community-server:安装服务端包
- systemctl enable --now:启用并立即启动服务
- mysqld.log:临时密码写入日志

APT(Ubuntu/Debian)示例

# 1. 添加官方仓库
wget https://repo.mysql.com/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb

# 2. 更新索引与安装
sudo apt update
sudo apt install -y mysql-server

# 3. 服务状态
sudo systemctl status mysql

常见问题与排错

# 1. 服务起不来,查看日志
sudo journalctl -u mysqld -n 200 --no-pager

# 2. 端口被占用
sudo ss -lntp | grep 3306

# 3. 版本被自动升级,锁定版本
sudo yum versionlock add mysql-community-server

2)二进制包安装(官方 tar 包)#

适用:生产常见方式,需固定版本或自定义目录
示例(通用Linux)

# 1. 下载安装包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-linux-glibc2.28-x86_64.tar.xz

# 2. 解压与目录规划
sudo mkdir -p /opt/mysql
sudo tar -xf mysql-8.0.33-linux-glibc2.28-x86_64.tar.xz -C /opt/mysql --strip-components=1

# 3. 创建用户与目录
sudo useradd -r -s /sbin/nologin mysql
sudo mkdir -p /data/mysql/{data,logs,run}
sudo chown -R mysql:mysql /opt/mysql /data/mysql

# 4. 配置文件
sudo tee /etc/my.cnf >/dev/null <<'EOF'
[mysqld]
basedir=/opt/mysql
datadir=/data/mysql/data
socket=/data/mysql/run/mysql.sock
log_error=/data/mysql/logs/mysqld.err
pid-file=/data/mysql/run/mysqld.pid
port=3306
EOF

# 5. 初始化
sudo /opt/mysql/bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/data/mysql/data

# 6. 注册systemd服务
sudo tee /etc/systemd/system/mysqld.service >/dev/null <<'EOF'
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now mysqld

命令解释
- --initialize:初始化数据目录并生成临时密码
- basedir/datadir:分离程序与数据
- systemd:统一服务管理

排错要点

# 1. 查看错误日志
tail -n 50 /data/mysql/logs/mysqld.err

# 2. 权限问题
sudo chown -R mysql:mysql /data/mysql /opt/mysql

# 3. socket路径不一致
ls -l /data/mysql/run/mysql.sock

3)源码编译安装#

适用:特定补丁、编译选项或实验验证
示例(包含依赖与编译)

# 1. 依赖安装(以CentOS为例)
sudo yum -y install gcc gcc-c++ cmake ncurses-devel openssl-devel bison

# 2. 下载源码并编译
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33.tar.gz
tar -xf mysql-8.0.33.tar.gz
cd mysql-8.0.33

mkdir build && cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/opt/mysql \
  -DMYSQL_DATADIR=/data/mysql/data \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system

make -j4
sudo make install

解释
- -DCMAKE_INSTALL_PREFIX:安装路径
- -DMYSQL_DATADIR:默认数据目录
- WITH_SSL/ZLIB:指定系统库

排错要点

# 1. 缺失依赖
cmake .. 2>&1 | grep -i "missing"

# 2. 编译失败查看错误
make 2>&1 | tail -n 50

选型建议(含示例结论)#

  • 小规模/测试:YUM/APT,安装快、维护省
  • 生产环境:二进制,版本可控、稳定性高
  • 特殊需求:源码,仅在有明确编译/补丁需求时使用

练习与验证#

  1. 使用YUM/APT安装MySQL并获取临时密码,登录后修改密码。
  2. 用二进制包安装到 /opt/mysql,数据目录放 /data/mysql/data,验证 mysql -uroot -p -S /data/mysql/run/mysql.sock 能登录。
  3. 故意将 datadir 权限改错,观察日志错误并修复。