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"
处理:安装缺失的库(如libaio、ncurses、openssl)。 -
问题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 策略已评估