必须一次性安装build-essential、cmake、libssl-dev、libncurses-dev、liblz4-dev、libzstd-dev、libnuma1、libmecab2、pkg-config及gnupg,否则cmake配置阶段将因缺失依赖而失败。

确认系统是否满足编译依赖
Debian 12 默认不带 MySQL 编译所需的核心工具链和库,直接 cmake 会报错缺 libssl-dev、libncurses-dev、liblz4-dev、libzstd-dev 等。不装全就卡在 configure 阶段。
必须一次性装齐(含构建工具):
sudo apt install build-essential cmake libssl-dev libncurses-dev liblz4-dev libzstd-dev libnuma1 libmecab2 pkg-config- 如果提示
gnupg缺失(影响后续签名验证),补上sudo apt install gnupg - MySQL 8.0.33+ 强制要求
libedit-dev(替代旧版libreadline),漏掉会导致client/mysql.cc编译失败
下载并校验指定版本的源码包
去 MySQL Community Server 源码页 找对应版本(例如 mysql-8.0.39.tar.gz),注意选 Source Code → Generic Linux (Architecture Independent)。别下错成 Debian 或 tarball for Debian 的二进制包。
校验环节不能跳:
- 下载后先用
wget https://www.php.cn/link/06d86297d6e28d4637d60c86c2a2f5b6页面提供的 SHA256 值比对:sha256sum mysql-8.0.39.tar.gz - 再用官方 GPG 密钥验证签名(密钥需提前导入):
gpg --verify mysql-8.0.39.tar.gz.asc mysql-8.0.39.tar.gz - 解压后进目录检查
CMakeLists.txt是否存在,避免 tar 包损坏
配置 CMake 参数避免默认陷阱
MySQL 8.0 的默认 CMake 行为在 Debian 上容易出问题:比如默认启用 WITH_SSL=system 却找不到 OpenSSL 3 的头文件路径;或默认关掉 INSTALL_LAYOUT 导致安装后 mysqld 找不到插件目录。
推荐最小安全配置(以安装到 /usr/local/mysql 为例):
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LZ4=system \
-DWITH_ZSTD=system \
-DINSTALL_LAYOUT=STANDALONE \
-DENABLED_LOCAL_INFILE=ON \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc/mysql \
-DWITH_NUMA=ON
关键点:
-
-DWITH_SSL=system必须显式指定,否则可能 fallback 到 bundled OpenSSL,但 Debian 12 的libssl-dev是 OpenSSL 3,bundled 版本不兼容 -
-DINSTALL_LAYOUT=STANDALONE是重点——不加这个,make install后plugin_dir路径会错乱,启动时报Can't load plugin 'validate_password' - 不要加
-DBUILD_CONFIG=mysql_release:它会强制覆盖你的参数,且在非 RHEL 系统上常导致链接失败
编译安装后必须手动初始化与权限修复
make && sudo make install 完只是把二进制和配置放进去,/usr/local/mysql/data 还是空的,直接 mysqld --initialize 会因权限/SELinux(虽然 Debian 默认没开)或 my.cnf 缺失失败。
三步收尾不可省:
- 创建用户与数据目录:
sudo useradd -r -s /bin/false mysql && sudo mkdir -p /usr/local/mysql/data && sudo chown mysql:mysql /usr/local/mysql/data - 初始化并记下临时密码:
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data(输出里有A temporary password is generated for root@localhost: xxx) - 生成最小
my.cnf:echo -e "[mysqld]\ndatadir = /usr/local/mysql/data\nsocket = /tmp/mysql.sock\nbind-address = 127.0.0.1" | sudo tee /etc/mysql/my.cnf,否则mysql_secure_installation找不到配置
最后用 sudo /usr/local/mysql/bin/mysqld_safe --user=mysql & 启动,再用临时密码登录执行 ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx'; —— 这一步必须做,因为 MySQL 8.0 默认用 caching_sha2_password 插件,空密码或老插件方式会连不上。
最容易被忽略的是 INSTALL_LAYOUT=STANDALONE 和初始化前的 chown mysql:mysql /usr/local/mysql/data:前者不设,插件加载全挂;后者不做,mysqld 直接拒绝启动,报错 Directory not empty 或 Permission denied 却不告诉你缺 chmod。

















