二进制安装MySQL最稳也最容易翻车:需装libaio、严格设置mysql用户及目录权限、确保my.cnf中datadir和basedir为正确绝对路径;8.0+必须用mysqld --initialize且参数顺序正确;初始化密码仅见于错误日志;启动失败优先检查socket、pid-file、log-error三路径权限与一致性。

直接用二进制包装 MySQL,最稳也最容易翻车
Linux 上装 MySQL,二进制安装(tar.xz 包)比 yum 或 rpm 更可控——不污染系统包管理、可多实例共存、版本明确。但它的“稳”有个前提:每一步权限、路径、依赖都得对,错一个就卡在 mysqld --initialize 或启动失败。
初始化前必须搞定的三件事
不是解压完就能跑,缺一不可:
-
libaio必须装,否则mysqld启动直接报error while loading shared libraries: libaio.so.1;Oracle Linux / CentOS / Rocky 都要:yum install -y libaio - 用户和目录权限必须严格分离:
useradd -r -g mysql -s /bin/false mysql创建系统用户,再chown -R mysql:mysql /usr/local/mysql /data/mysql3306,不能只改目录,也不能漏掉mysql用户对datadir的写权限 -
/etc/my.cnf里datadir和basedir必须绝对路径、且不能有拼写错误;比如写成/data/mysql3306/mysql却实际建在/data/mysql3306,初始化会静默失败
初始化命令别用错,8.0+ 和 5.7 完全不同
MySQL 5.7 还能用 mysql_install_db,但 8.0+ 已移除,硬用会报 command not found;必须用 mysqld --initialize,而且参数顺序敏感:
- 正确写法(推荐显式指定):
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql - 错误写法:
mysqld --initialize --user=mysql --datadir=/data/mysql3306—— 如果/etc/my.cnf里没配basedir,它会找不到share/english/errmsg.sys,报Failed to find valid data directory - 初始化成功后,root 密码只在错误日志里输出一次,类似:
A temporary password is generated for root@localhost: fc9%Xt<E5eF/,记不住就只能重置(得加skip-grant-tables,更麻烦)
启动失败?先盯住 socket、pid、error log 三个文件
服务起不来,90% 是这三个路径配置不一致或权限不对:
-
socket=/tmp/mysql.sock要和客户端连接时用的路径一致;如果应用连不上,先检查mysql -S /tmp/mysql.sock -u root -p是否通 -
pid-file=/data/mysql3306/mysqld.pid目录必须存在且mysql用户可写,否则mysqld_safe启动后立刻退出,日志里只有Cannot write pid file -
log-error=/data/mysql3306/mysqld.log是唯一真相来源,systemctl start mysqld失败时,别猜,直接tail -n 20 /data/mysql3306/mysqld.log
二进制安装没有“一键完成”,它的自由度来自你对每个路径、每个用户、每个配置项的亲手确认。少一次 chown,多一个空格,都可能让数据库停在启动前最后一秒。










