灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL8-SOP

    • 第一章 概述
    • 第二章 环境准备
      • 2.1 硬件要求与规划
        • 最低配置要求
        • 关键硬件决策
      • 2.2 操作系统内核参数
        • 禁用透明大页(Transparent HugePages)
        • 内核参数优化
        • IO 调度器设置
      • 2.3 文件系统与目录规划
        • 文件系统选择
        • 目录结构与权限
      • 2.4 系统资源限制
        • 文件描述符与进程限制
        • 设置系统服务资源限制
      • 2.5 SELinux 与防火墙
        • SELinux 配置
        • 防火墙配置
      • 2.6 开工前检查清单
        • 检查项与验证方法
        • 检查未通过的处理建议
      • 2.7 后续步骤
    • 第三章 安装部署规范
    • 第四章 ReplicaSet高可用配置
    • 第五章 监控与日常维护
    • 第六章 故障处理手册
    • 第七章 安全与权限管理
    • 第八章 扩展与升级方案
    • 附录
  • 课程笔记

  • 专题系列
  • MySQL8-SOP
灯下哥谭
2024-01-09
目录

第二章 环境准备原创

# 第二章 环境准备

本章给出 MySQL 8.0 部署前的硬件基线、操作系统内核与文件系统参数、目录规划、账号权限配置,以及安装前必须逐项核对的检查清单。这些配置项在实例运行后再改,代价会大得多,属于必须一次做对的部分。

版本说明

本文档基于 MySQL 8.0 LTS 版本整理。内核参数与文件系统建议适用于 8.0 全系列,具体环境请在目标版本上验证。

# 2.1 硬件要求与规划

MySQL 8.0 对硬件有一定要求,特别是在生产环境中,不当的硬件选型会导致性能瓶颈或稳定性问题。

# 最低配置要求

资源 最低配置 生产建议
CPU 4核 8核及以上
内存 16G 物理内存建议为 innodb_buffer_pool_size 目标的 1.5 倍以上
磁盘 SSD 500G NVMe SSD 优先,IOPS ≥ 5000
网络 千兆以太网 主从节点间延迟 < 2ms

CPU 规划:MySQL 的查询处理、连接管理和复制都是 CPU 密集型的。写入量大的场景(高并发 INSERT/UPDATE)对 CPU 要求更高。建议为系统和其他进程保留至少 1-2 核。

内存规划:InnoDB Buffer Pool 是 MySQL 的核心缓存,建议设置为物理内存的 50-75%。过高的设置会导致系统内存不足,触发 OOM。对于 64GB 内存的服务器,Buffer Pool 可设置为 40-48GB,剩余内存留给 OS 文件缓存、连接线程和其他进程。

磁盘规划:MySQL 的写入性能直接受磁盘 IOPS 和延迟影响。传统 SATA SSD 的 IOPS 约 5000-10000,NVMe 可达 50 万以上。对于写入密集型业务,NVMe 可显著降低事务提交延迟。

# 关键硬件决策

RAID 选型:数据盘推荐 RAID 10,兼顾性能与冗余。RAID 5/6 的写惩罚(需要计算校验位)对 MySQL 写性能不利,约为 RAID 10 的 30-50%。若使用云盘,选择「多副本」而非单副本类型,同时关注云厂商的 IOPS 和吞吐承诺。

磁盘分区规划:数据目录、日志目录、备份目录应分离挂载,避免磁盘空间耗尽时互相影响。建议将 Binlog 和 Redo Log 放在独立的 SSD 上,分散 IO 压力。

# 2.2 操作系统内核参数

# 禁用透明大页(Transparent HugePages)

透明大页(THP)是 Linux 内核的内存管理特性,旨在通过使用更大的内存页(2MB 而非 4KB)来减少 TLB 未命中。但 MySQL 的内存分配模式与 THP 不兼容,会导致性能抖动、内存泄漏甚至实例崩溃。

问题表现:当启用 THP 时,MySQL 可能出现内存使用量持续增长(RSS 增加)、查询响应时间不稳定、甚至 OOM 被系统杀死。

临时禁用(立即生效,重启失效):

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
1
2

永久禁用(写入启动脚本):

cat >> /etc/rc.d/rc.local << 'EOF'
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
chmod +x /etc/rc.d/rc.local
1
2
3
4
5

# 内核参数优化

以下内核参数调整针对 MySQL 高并发场景优化网络连接处理能力和内存管理行为。

cat >> /etc/sysctl.conf << 'EOF'
# 减少 swap 使用倾向
vm.swappiness = 1

# 提升网络连接处理能力
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# TCP 连接保持
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
EOF

sysctl -p
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

参数说明:

  • vm.swappiness = 1:Linux 内核的内存管理参数,控制使用 swap 的倾向。值为 0 时完全不使用 swap,极端情况下可能导致 OOM;值为 1 表示仅在物理内存极度紧张时才使用 swap。MySQL 不应依赖 swap,一旦发现系统有 swap 使用,应优先调优 MySQL 配置而非依赖 swap。
  • net.core.somaxconn:定义了每个端口监听队列的最大长度。MySQL 默认 max_connections 可能达到 1000+,如果内核的 somaxconn 太小(默认 128),会导致大量连接请求被丢弃。设置为 65535 确保连接队列不会成为瓶颈。
  • tcp_keepalive_time:TCP 连接空闲多少秒后开始发送 keepalive 探测包。设置为 300 秒(5分钟),可以及时检测并清理死连接,释放线程资源。

# IO 调度器设置

SSD/NVMe 磁盘推荐使用 none 或 mq-deadline。

调度器选择依据:

  • none:NVMe 原生多队列设计,内核无需额外调度,直接透传 IO 请求性能最优
  • mq-deadline:传统 SSD 仍有优化空间,保证 IO 合并和顺序化
  • cfq(已弃用):旧机械硬盘时代的产物,对 SSD 只有负面影响
# 查看当前调度器
cat /sys/block/sda/queue/scheduler

# 设置为 none(适用于 NVMe)
echo none > /sys/block/nvme0n1/queue/scheduler
1
2
3
4
5

如需永久生效,写入 /etc/udev/rules.d/60-mysql-scheduler.rules:

ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"
1

# 2.3 文件系统与目录规划

# 文件系统选择

推荐 XFS,规模大文件性能好,元数据操作快。

# 创建 XFS 文件系统
mkfs.xfs -f -n ftype=1 /dev/sdb1
1
2

挂载参数:

/dev/sdb1 /data/mysql xfs defaults,noatime,nodiratime,nobarrier 0 0
1

参数说明:

  • noatime / nodiratime:禁止访问文件/目录时更新 atime,减少不必要的写 IO。对于数据库文件,atime 几乎没有业务价值。
  • nobarrier:关闭写屏障。对于有独立电池保护的 RAID 控制器(BBU/CacheVault),数据已受控制器保护,无需文件系统层面的屏障。无 BBU 的磁盘不加此参数。

# 目录结构与权限

MySQL 需要预先规划好数据、日志、备份、临时文件的存放位置,并设置正确的权限,避免权限不足或安全隐患。

# 创建 mysql 系统用户
useradd -r -s /bin/false mysql

# 创建目录结构
mkdir -p /data/mysql/{data,logs/{binlog,relaylog,slowlog,errorlog},backup,tmp}

# 设置属主与权限
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql
chmod 700 /data/mysql/data
1
2
3
4
5
6
7
8
9
10
目录 用途 权限
/data/mysql/data 数据文件 700
/data/mysql/logs/binlog 二进制日志 750
/data/mysql/logs/relaylog 中继日志 750
/data/mysql/logs/slowlog 慢查询日志 755
/data/mysql/logs/errorlog 错误日志 755
/data/mysql/backup 备份目录 750
/data/mysql/tmp 临时文件 750

# 2.4 系统资源限制

Linux 系统对每个用户的资源使用有默认限制,MySQL 高并发场景需要突破这些限制。

# 文件描述符与进程限制

MySQL 每个连接占用一个文件描述符,再加上表文件、Binlog、Redo Log 等,高并发实例很容易超过默认的 1024 限制。

cat >> /etc/security/limits.conf << 'EOF'
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535
EOF
1
2
3
4
5
6

# 设置系统服务资源限制

systemd 管理的 MySQL 服务不会读取 limits.conf,需要单独配置。

创建 /etc/systemd/system/mysqld.service.d/limits.conf:

[Service]
LimitNOFILE=65535
LimitNPROC=65535
1
2
3

# 2.5 SELinux 与防火墙

生产环境的安全策略需要在便利性和安全性之间平衡。

# SELinux 配置

SELinux 是 Linux 的强制访问控制系统,默认策略可能阻止 MySQL 监听非标准端口或访问非默认数据目录。

生产环境建议保持启用,配置正确的上下文:

# 安装 semanage 工具
yum install -y policycoreutils-python-utils

# 添加 MySQL 端口上下文
semanage port -a -t mysqld_port_t -p tcp 3306
semanage port -a -t mysqld_port_t -p tcp 33061
checkmodule -M -m -o mysql8.mod mysql8.te
1
2
3
4
5
6
7

若选择禁用(测试环境):

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
1
2

# 防火墙配置

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=33061/tcp  # 组复制端口
firewall-cmd --reload
1
2
3

# 2.6 开工前检查清单

检查清单的目的是在正式开始安装前,系统性确认所有前置条件已满足,避免安装后因环境问题导致的返工。

# 检查项与验证方法

检查项 确认方法 标准要求
透明大页已禁用 cat /sys/kernel/mm/transparent_hugepage/enabled 输出含 [never]
vm.swappiness sysctl vm.swappiness 值为 1
文件描述符限制 su - mysql -c 'ulimit -n' ≥ 65535
目录权限 ls -la /data/mysql/data 属主 mysql:mysql,权限 700
磁盘空间 df -h /data/mysql 使用率 < 70%
NTP 时间同步 timedatectl status NTP enabled: yes
SELinux 状态 getenforce Enforcing 或已配置策略
防火墙端口 firewall-cmd --list-ports 3306/tcp, 33061/tcp 已放行
网络延迟 ping <从节点IP> 平均延迟 < 2ms

关键检查项说明:

  • 透明大页:若未禁用,MySQL 运行一段时间后可能出现内存分配失败或性能抖动。
  • swappiness:设置为 1 而非 0 是为了在极端内存压力下系统仍有最后一道防线,但 MySQL 不应依赖 swap。
  • 目录权限:数据目录权限 700 是为了防止其他用户读取或修改数据文件,特别是包含密码的日志文件。
  • NTP 时间同步:主从节点时间差超过 1 秒可能导致复制延迟计算错误,SSL 证书验证也可能失败。

所有检查项确认通过后,方可进入第三章 安装部署规范。

# 检查未通过的处理建议

若检查发现某项未通过,修正后再重新检查:

  • 透明大页禁用失败:检查 /sys/kernel/mm/transparent_hugepage/enabled 权限,使用 root 用户执行
  • 文件描述符限制不生效:需重新登录 mysql 用户或使用 su - mysql 切换,才能加载新 limits
  • SELinux 配置复杂:生产环境若暂时无法配置正确策略,可记录风险并设置为 Permissive 模式
  • 网络延迟不达标:优先排查物理线路质量,其次检查网卡协商速率(ethtool)和防火墙策略

修正后务必重新运行全部检查项,避免遗漏。

# 2.7 后续步骤

环境准备完成后,即可进入 MySQL 安装部署阶段。安装完成后,应及时配置监控、备份策略,并按照本 SOP 第五章的日常维护规范进行运维。

本章的配置项约定了 MySQL 运行的基础环境,后续章节将在此基础上展开数据库本身的配置与优化。


🤖 Agent 可直接解析的元数据块(点击展开)
{
  "_meta": {
    "doc_version": "2024-01-09",
    "article_id": "mysql8-sop-chapter2",
    "profile_context": "mysql-sop",
    "estimated_setup_time": "30min"
  },
  "quick_start": {
    "disable_thp": "echo never > /sys/kernel/mm/transparent_hugepage/enabled",
    "set_swappiness": "sysctl vm.swappiness=1",
    "create_dirs": "mkdir -p /data/mysql/{data,logs/{binlog,relaylog,slowlog,errorlog},backup,tmp}",
    "set_permissions": "chown -R mysql:mysql /data/mysql && chmod 700 /data/mysql/data"
  },
  "safety_rules": [
    "必须在安装前完成透明大页禁用",
    "数据目录权限必须是 700,属主 mysql",
    "生产环境 swappiness 必须为 1,禁止依赖 swap"
  ],
  "verification": {
    "thp_check": "cat /sys/kernel/mm/transparent_hugepage/enabled | grep never",
    "ulimit_check": "su - mysql -c 'ulimit -n'",
    "dir_permissions": "ls -ld /data/mysql/data",
    "checklist_complete": "检查清单所有项通过"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#SRE#MySQL#数据库
上次更新: 9/11/2026

← 第一章 概述 第三章 安装部署规范→

最近更新
01
DeepSeek Harness 实战 06|学习笔记:插件、工具、技能不在同一个维度上 原创
09-11
02
DeepSeek Harness 实战 05|让两个编码 Agent 共用一份长期记忆 原创
09-09
03
DeepSeek Harness 实战 04|学习笔记:从「已知限制」里读出三处设计张力 原创
09-08
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式