二进制包安装mysql后必须手动创建用户、配置my.cnf并显式指定路径初始化,否则mysqld --initialize会静默失败;my.cnf应放/etc/my.cnf,至少含[mysqld]段的datadir、basedir、socket和[client]段的socket,且lower_case_table_names=1须在初始化前设置。

二进制包安装 MySQL 后,必须手动创建用户、配置 my.cnf、显式指定路径初始化,否则 mysqld --initialize 会静默失败或写到错误位置。
my.cnf 放哪、怎么写、哪些参数必须设
MySQL 启动时按顺序读取:/etc/my.cnf → /etc/mysql/my.cnf → $BASEDIR/my.cnf → ~/.my.cnf,优先级从高到低。生产环境只用 /etc/my.cnf 或显式 --defaults-file,避免多实例干扰。
最简可用的 my.cnf 至少包含:
-
[mysqld]段:必填datadir(空目录,如/data/mysql)、basedir(解压路径,如/usr/local/mysql)、socket(推荐/tmp/mysql.sock) -
[client]段:建议加socket,否则mysql -u root默认连/var/lib/mysql/mysql.sock,容易报Can't connect to local MySQL server -
lower_case_table_names=1必须在初始化前设好,后续不可改;thread_concurrency在 MySQL 5.7+ 已废弃,设了反而触发 warning
初始化命令必须带 --defaults-file,且不能漏 --user
mysqld --initialize 是纯命令行操作,不会自动读 /etc/my.cnf——除非你显式传 --defaults-file。漏掉它,datadir 就会变成当前目录下的 ./data,初始化完找不到数据文件。
正确命令示例:
bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
-
--user=mysql必须存在,否则生成的文件属主是当前用户(比如root),后续mysqld以mysql用户启动时因权限拒绝失败 - 重复执行
--initialize会直接退出并报错A mysqld process already exists,不是覆盖,是拒绝重入 - 临时 root 密码只输出到
log-error指定的日志文件(如/data/mysql/*.err),查不到就翻cat /data/mysql/*.err | grep 'temporary password'
解压后必须建软链接,datadir 权限和路径要提前处理
解压后立即在 /usr/local/ 下建软链接:ln -s mysql-8.0.35-linux-glibc2.17-x86_64 mysql。硬编码路径一旦写死,升级或脚本调用极易出错;mysqld_safe 和多数启动脚本默认认 /usr/local/mysql 这个路径。
datadir 必须手动创建并授权:
mkdir -p /data/mysql && chown -R mysql:mysql /data/mysql- 不能是
root或其他用户可写目录,否则初始化会拒绝执行(MySQL 5.7+ 默认启用--secure-file-priv限制) - 避免设在
/tmp或/var/tmp——这些路径可能被系统定期清理 - 若用 LVM 挂载点(如
/data),确认挂载选项不含noexec或nosuid
最容易被忽略的是:初始化成功后,datadir 下必须出现 mysql、sys 等系统库目录,这是验证是否成功的最直观依据;而临时密码只写日志、不打屏,没配 log-error 就等于丢了密码。











