6.2.2 安装前检查与系统依赖准备

安装 MySQL 前应完成系统环境盘点与依赖准备,确保内核、资源、网络、时间与基础库满足要求,并形成可复用的检查清单。以下给出原理草图与可执行示例,便于落地与验收。

文章图片

1) 系统与资源检查(含命令解释)#

# 操作系统与内核版本(用于选择 MySQL 发行包兼容性)
cat /etc/os-release
uname -r

# CPU/内存
lscpu | egrep 'Model name|CPU\(s\)|Thread|Core'
free -h

# 磁盘与挂载(建议独立数据盘与日志盘)
lsblk -f
df -hT

# 端口占用检查,避免 3306 冲突
ss -lntp | grep 3306 || echo "3306 未占用"

预期效果
- 发行版为长期支持版本(如 CentOS Stream/Rocky/Ubuntu LTS)。
- 数据盘与日志盘挂载在独立目录,例如 /data/mysql/data/log/mysql

2) 时间同步与DNS检查#

# 时区与时间同步
timedatectl status
chronyc sources -v || ntpq -p

# DNS 与主机名解析(确保节点间互相解析)
hostnamectl
getent hosts $(hostname)
dig +short mysql-node-2.example.com

解释
- timedatectl 查看时区与 NTP 状态。
- chronyc sources 检查时间源健康度。
- getent hosts 验证本机名解析是否正常。

3) 依赖准备(YUM/APT 与二进制通用)#

# RHEL/CentOS/Rocky
sudo yum install -y libaio numactl-libs ncurses-compat-libs openssl zlib

# Ubuntu/Debian
sudo apt update
sudo apt install -y libaio1 libnuma1 libncurses5 openssl zlib1g

若使用源码/二进制编译安装(补齐编译工具):

sudo yum install -y gcc gcc-c++ make cmake
# 或
sudo apt install -y build-essential cmake

4) 用户、目录与权限规划(示例)#

# 创建 mysql 用户与组
sudo groupadd -r mysql
sudo useradd -r -g mysql -s /sbin/nologin mysql

# 规划目录(data/log/tmp)
sudo mkdir -p /data/mysql /data/log/mysql /data/tmp/mysql
sudo chown -R mysql:mysql /data/mysql /data/log/mysql /data/tmp/mysql
sudo chmod 750 /data/mysql /data/log/mysql /data/tmp/mysql

解释
- -r 创建系统用户,避免登录。
- 目录权限 750 限制非授权访问。

5) 安全与资源限制(ulimit / SELinux / 防火墙)#

# 查看当前资源限制
ulimit -a

# 永久提升限制(建议)
sudo tee -a /etc/security/limits.conf >/dev/null <<'EOF'
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc  4096
mysql hard nproc  4096
EOF

# systemd 级别限制(避免被 systemd 覆盖)
sudo mkdir -p /etc/systemd/system/mysqld.service.d
sudo tee /etc/systemd/system/mysqld.service.d/override.conf >/dev/null <<'EOF'
[Service]
LimitNOFILE=65535
LimitNPROC=4096
EOF
sudo systemctl daemon-reload

SELinux 与防火墙示例

# SELinux 状态
getenforce

# 防火墙放行(安装前验证策略,生产建议按需放行)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports | grep 3306

6) 内核参数与 THP 检查(避免性能抖动)#

# 查看透明大页状态
cat /sys/kernel/mm/transparent_hugepage/enabled

# 临时关闭 THP(重启后失效)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

# 常用内核参数示例
sudo tee /etc/sysctl.d/99-mysql.conf >/dev/null <<'EOF'
fs.file-max = 1048576
net.core.somaxconn = 1024
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
EOF
sudo sysctl -p /etc/sysctl.d/99-mysql.conf

解释
- fs.file-max 提升系统文件句柄总量。
- somaxconn 改善高并发连接队列。

7) 预检脚本一键化示例#

#!/usr/bin/env bash
# 文件: /usr/local/bin/mysql_precheck.sh
set -euo pipefail

echo "== OS/Kernel =="
cat /etc/os-release | egrep 'NAME|VERSION'
uname -r

echo "== CPU/Memory =="
lscpu | egrep 'Model name|CPU\(s\)|Core'
free -h

echo "== Disk/FS =="
df -hT
lsblk -f

echo "== Time Sync =="
timedatectl | egrep 'Time zone|NTP'

echo "== Port 3306 =="
ss -lntp | grep 3306 || echo "3306 free"

echo "== Limits =="
ulimit -n

运行方式

chmod +x /usr/local/bin/mysql_precheck.sh
/usr/local/bin/mysql_precheck.sh

8) 常见问题与排错(含命令)#

  • 问题1:依赖缺失导致 mysqld 无法启动
    排查:
    bash ldd /usr/local/mysql/bin/mysqld | grep "not found"
    处理:安装缺失的库(如 libaioncursesopenssl)。

  • 问题2:端口被占用
    排查:
    bash ss -lntp | grep 3306
    处理:停止冲突服务或修改 my.cnf 端口。

  • 问题3:权限不足导致数据目录不可写
    排查:
    bash ls -ld /data/mysql /data/log/mysql
    处理:确保属主为 mysql:mysql,权限 750。

9) 练习与验收清单#

练习1:在测试机上完成预检脚本部署并输出检查结果。
练习2:模拟端口冲突(启动一个监听 3306 的服务),使用命令定位并解决。
验收清单
- [ ] 时间同步正常、时区一致
- [ ] 依赖包安装完成
- [ ] 目录权限正确
- [ ] ulimit 与 systemd 限制生效
- [ ] 端口无冲突,THP 策略已评估