当前位置:首页>Linux>从 Windows 到 Linux:搭建企业级 MySQL 环境的第一步

从 Windows 到 Linux:搭建企业级 MySQL 环境的第一步

  • 2026-09-20 21:34:23
从 Windows 到 Linux:搭建企业级 MySQL 环境的第一步
生产环境不是 Windows,Linux 才是 MySQL 的主战场
    由于微信公共号的推送消息发生变化,点右上角的三个点,并设置为星标,随时能看到发送的消息。

01 / 一句话讲清楚

在 Linux 上安装 MySQL 8.0 之前,需要做好三件事:操作系统基础配置(主机名、时间同步、防火墙)、安装必要依赖包、关闭 NUMA 和 Swap 等影响性能的特性。本文以 CentOS 7/8 和 Ubuntu 20.04/22.04 双系统覆盖。

📌 阅读时长:15 分钟 | 操作时长:20-30 分钟

02 / 操作系统版本选择

2.1 推荐版本

发行版
推荐版本
MySQL 8.0 兼容性
生产环境占比
CentOS / RHEL
7.x / 8.x / 9.x
官方完整支持
60%+
Rocky Linux / AlmaLinux
8.x / 9.x
CentOS 替代品
20%+
Ubuntu
20.04 LTS / 22.04 LTS
官方支持
15%+
Debian
11 / 12
社区支持
5%

📌 建议:新项目选 Rocky Linux 9 或 Ubuntu 22.04 LTS,有长期支持且社区活跃。

2.2 查看当前系统版本

# CentOS / RHEL

cat /etc/redhat-release

rpm -q centos-release

# Ubuntu / Debian

lsb_release -a

cat /etc/os-release

# 通用(查看内核)

uname -a

03 / 基础系统配置

3.1 设置主机名

# 查看当前主机名

hostname

# 设置主机名(永久生效)

# CentOS/RHEL

hostnamectl set-hostname mysql-node1

vi /etc/hosts  # 添加: 127.0.1.1 mysql-node1

# Ubuntu

hostnamectl set-hostname mysql-node1

vi /etc/hosts  # 添加: 127.0.1.1 mysql-node1

# 验证

hostname

hostname -f  # 查看 FQDN

3.2 时间同步(NTP)

MySQL 对时间敏感,主从复制要求各节点时间一致。

# CentOS 7 / 8

yum install -y chrony

systemctl start chronyd

systemctl enable chronyd

chronyc sources  # 查看同步源

# Ubuntu

apt update

apt install -y chrony

systemctl start chrony

systemctl enable chrony

# 验证同步状态

timedatectl status

# 应显示: System clock synchronized: yes

3.3 关闭防火墙或开放端口

# 方案一:开放 MySQL 端口(推荐)

# CentOS (firewalld)

firewall-cmd --permanent --add-port=3306/tcp

firewall-cmd --reload

firewall-cmd --list-ports

# Ubuntu (ufw)

ufw allow 3306/tcp

ufw status

# 方案二:关闭防火墙(仅测试环境)

# CentOS

systemctl stop firewalld

systemctl disable firewalld

# Ubuntu

systemctl stop ufw

systemctl disable ufw

3.4 关闭 SELinux(CentOS/RHEL)

SELinux 可能导致 MySQL 文件读写权限问题。

# 查看状态

getenforce

# 临时关闭

setenforce 0

# 永久关闭(重启生效)

vi /etc/selinux/config

# 修改: SELINUX=disabled

# 验证

reboot

getenforce  # 应显示 Disabled

3.5 调整文件描述符限制

MySQL 需要大量文件句柄。

# 查看当前限制

ulimit -n

# 永久修改

# CentOS: /etc/security/limits.conf

echo "mysql soft nofile 65535" >> /etc/security/limits.conf

echo "mysql hard nofile 65535" >> /etc/security/limits.conf

# Ubuntu: 同样位置

vi /etc/security/limits.conf

# 添加:

mysql soft nofile 65535

mysql hard nofile 65535

# 验证(切换到 mysql 用户后)

su - mysql

ulimit -n

04 / 关闭 NUMA 和 Swap(性能关键)

4.1 为什么要关闭 NUMA?

MySQL 在 NUMA 架构下会出现内存分配不均的问题,导致性能抖动。

# 查看 NUMA 架构

numactl --hardware

# 临时关闭 NUMA 重分配(重启失效)

echo 0 > /proc/sys/kernel/numa_balancing

# 永久关闭:修改 grub 启动参数

vi /etc/default/grub

# 在 GRUB_CMDLINE_LINUX 中添加: numa=off

# CentOS 7/8 示例

GRUB_CMDLINE_LINUX="... numa=off"

# 重新生成 grub 配置

# CentOS 7

grub2-mkconfig -o /boot/grub2/grub.cfg

# Ubuntu

update-grub

# 重启生效

reboot

4.2 关闭 Swap(或降低 Swap 倾向)

MySQL 不希望使用 Swap,会导致性能急剧下降。

# 查看 Swap 使用

free -h

# 方案一:临时关闭

swapoff -a

# 方案二:永久关闭(注释掉 swap 行)

vi /etc/fstab

# 注释掉包含 swap 的行: # /dev/mapper/xxx swap ...

# 方案三:降低 Swap 倾向(保留但减少使用)

echo 10 > /proc/sys/vm/swappiness

vi /etc/sysctl.conf

# 添加: vm.swappiness=10

sysctl -p

05 / 安装依赖包

5.1 CentOS / RHEL

# 安装 EPEL 仓库(可选,提供额外包)

yum install -y epel-release

# 安装 MySQL 依赖

yum install -y \

    libaio \

    numactl \

    perl \

    net-tools \

    wget \

    vim \

    tar \

    gcc \

    make \

    openssl-devel \

    ncurses-devel

# 安装开发工具(源码编译需要)

yum groupinstall -y "Development Tools"

5.2 Ubuntu / Debian

# 更新软件源

apt update

# 安装 MySQL 依赖

apt install -y \

    libaio1 \

    numactl \

    perl \

    net-tools \

    wget \

    vim \

    tar \

    build-essential \

    cmake \

    libssl-dev \

    libncurses-dev \

    pkg-config

06 / 创建 MySQL 用户与目录

6.1 创建系统用户

# 创建 mysql 用户(不创建家目录,无法登录)

groupadd mysql

useradd -r -g mysql -s /bin/false mysql

# 验证

id mysql

# 输出: uid=996(mysql) gid=995(mysql) groups=995(mysql)

6.2 创建目录结构

# 创建数据目录

mkdir -p /data/mysql/data     # 数据文件

mkdir -p /data/mysql/logs     # 日志文件

mkdir -p /data/mysql/tmp      # 临时文件

mkdir -p /data/mysql/binlog   # Binlog

mkdir -p /data/mysql/relaylog # 中继日志(从库用)

# 设置权限

chown -R mysql:mysql /data/mysql

# 查看目录权限

ls -ld /data/mysql

# drwxr-xr-x 5 mysql mysql 4096 ...

07 / 系统参数调优(sysctl.conf)

# 编辑 /etc/sysctl.conf,添加以下内容

# 网络连接优化

net.core.somaxconn = 65535

net.core.netdev_max_backlog = 65535

net.ipv4.tcp_max_syn_backlog = 65535

net.ipv4.tcp_fin_timeout = 10

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_syncookies = 1

# 内存与文件系统

vm.swappiness = 10

vm.dirty_background_ratio = 5

vm.dirty_ratio = 20

fs.file-max = 1000000

# 应用配置

sysctl -p

08 / 完整环境检查清单

安装 MySQL 前,逐项确认:

检查项
命令
期望结果
系统版本
cat /etc/os-release
CentOS 7+ / Ubuntu 20.04+
主机名
hostname
已设置
时间同步
timedatectl status
synchronized: yes
防火墙
firewall-cmd --list-ports
3306 已开放
SELinux
getenforce
Disabled
文件限制
ulimit -n
65535
依赖包
rpm -q libaio
 (CentOS)
已安装
MySQL 用户
id mysql
用户存在
数据目录
ls -ld /data/mysql
权限 mysql:mysql

写在最后

Linux 环境准备的核心要点:

项目
核心操作
时间同步
安装 chrony,确保同步
关闭 NUMA
修改 grub,添加 numa=off
关闭 Swap
swapoff -a
 或降低 swappiness
文件限制
修改 limits.conf,设置 65535
创建用户
创建 mysql 系统用户
创建目录
/data/mysql 数据目录

📌 一句话总结:环境准备花 30 分钟,能避免未来 30 小时的踩坑。

📌 下篇预告:L02 - YUM/APT 安装 MySQL 8.0:官方仓库配置与安装

最新文章

随机文章