必须先执行uname -m和ldd --version确认架构与glibc版本,再下载对应后缀的mysql二进制包;解压后需创建mysql用户、正确授权目录、配置my.cnf并指定--defaults-file初始化,否则mysqld启动失败。

确认系统架构和glibc版本再下载
直接下错包会导致 mysqld 启动失败,报 cannot execute binary file 或 GLIBC_2.xx not found。先执行:uname -m 看是 x86_64 还是 aarch64;ldd --version 看 glibc 主版本(如 2.17、2.28);
然后去 MySQL 官网下载页选对应后缀的包,比如 mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz。
解压后必须用非 root 用户运行 mysqld
MySQL 8.0 默认拒绝以 root 身份启动,哪怕加了 --user=root 也会报错 mysqld: Can't run as root without --user option。正确做法是:
- 创建专用系统用户:
groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql - 解压目录(如
/opt/mysql)和数据目录(如/data/mysql)全部chown -R mysql:mysql - 后续所有初始化、启动命令都加
--user=mysql,或在配置文件里写user = mysql
初始化前必须手动准备配置文件和目录结构
二进制包不带默认 my.cnf,也不自动建数据目录。漏掉任意一项都会让 mysqld --initialize 失败,常见报错包括:Can't find error log、Failed to open log file、File './mysql-bin.index' not found。
- 至少要创建:数据目录(
datadir)、日志目录(log-error所在路径)、socket 目录(socket文件父目录)、pid 目录(pid-file父目录) -
/etc/my.cnf至少包含:[mysqld]段、datadir、socket、log-error、pid-file四项 - 注意
lower_case_table_names=1必须在初始化前设好,初始化后不可更改
初始化命令必须显式指定配置文件路径
不加 --defaults-file 就运行 mysqld --initialize,它会按顺序搜索 /etc/my.cnf、/etc/mysql/my.cnf 等,一旦找到一个空或错配的配置,就可能静默失败或生成错误的 root 密码。稳妥做法是:
- 把配置文件放在确定位置,比如
/etc/my.cnf - 初始化时强制指定:
mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql - 初始化成功后,会打印临时 root 密码到
log-error对应的日志文件里,不是终端输出 - 如果初始化失败且提示
already been initialized,说明datadir非空,删干净再试
最容易被忽略的是:初始化只做一次,而且密码只打日志不回显;mysqld 启动时若找不到 pid-file 所在目录,会静默退出,查不到进程也看不到错误——得盯紧 log-error 文件内容。











