结论:挂载云盘与手动部署MySQL 8.0必须严格按序执行——先格式化并挂载云盘至/data,再创建MySQL目录并递归授权chown -R mysql:mysql /data,最后初始化时指定datadir=/data/mysql/data;否则mysqld --initialize将失败或误写系统盘。

直接说结论:挂载云盘 + 手动部署 MySQL 8.0,必须分开做、顺序不能错——先完成云盘挂载并格式化,再创建 MySQL 数据目录并赋权,最后初始化时指定该路径;否则 mysqld --initialize 会失败或写入系统盘,失去挂载意义。
云盘挂载后为什么 /data/mysql 还是空的?
常见错误是挂载完就直接进 /data 创建 mysql 目录,但没确认挂载是否生效。阿里云 ECS 新购云盘默认未格式化、未挂载,df -h 看不到新盘,lsblk 却能看到裸设备(如 /dev/vdb)。
- 先用
fdisk /dev/vdb创建主分区(一路按n→p→回车×3→w),再mkfs.xfs /dev/vdb1格式化(CentOS 7+/Alibaba Cloud Linux 3 推荐 xfs) -
mkdir -p /data后,用mount /dev/vdb1 /data挂载,立刻执行df -h | grep vdb确认输出中/data对应的是/dev/vdb1 - 写入
/etc/fstab:追加一行/dev/vdb1 /data xfs defaults 0 0,再mount -a测试不报错才算真正持久化
mysqld --initialize 报错 “Permission denied” 或 “Can’t create/write to file”
本质是权限链断裂:MySQL 进程以 mysql 用户身份运行,但挂载点 /data 的 owner 是 root,且新创建的 /data/mysql/data 目录未递归授权。
- 必须在挂载完成后,执行:
groupadd mysql && useradd -r -g mysql -s /bin/false mysql - 然后
chown -R mysql:mysql /data(不是只改/data/mysql!整个挂载点都要归 mysql) - 如果用
tar解压 MySQL 二进制包到/data/mysql,解压后要再跑一次chown -R mysql:mysql /data/mysql - 特别注意:
/data/mysql/data目录必须为空,否则--initialize会拒绝初始化
配置文件里 datadir 和 basedir 怎么写才不踩坑?
绝对路径写错一个字符,MySQL 就启动失败,日志里只报 Can't start server : Bind on unix socket 这类模糊错误,实际是找不到数据目录。
-
basedir指 MySQL 二进制文件所在目录,例如解压后是/data/mysql,那就写basedir=/data/mysql -
datadir必须指向挂载盘上的子目录,如datadir=/data/mysql/data(不能是/data/data或/data/mysql) -
socket路径建议也放在挂载盘上,比如socket=/data/mysql/tmp/mysql.sock,避免/tmp被清理导致连接中断 - 配置文件必须叫
/etc/my.cnf或/data/mysql/my.cnf,且启动时显式指定:./mysqld --defaults-file=/etc/my.cnf --user=mysql
初始化后连不上,root@localhost 密码在哪?
MySQL 8.0 不再生成明文密码文件,初始密码只打印在终端或写入错误日志——但如果你用 --user=mysql 启动,日志默认在 /data/mysql/data/hostname.err 里,不是 /var/log/mysqld.log。
- 初始化命令必须带
--user=mysql,否则生成的 error log 权限不对,cat不出来 - 执行完
./mysqld --initialize --user=mysql,最后一行类似:A temporary password is generated for root@localhost: fG#2x!pQ9@kL - 如果漏看,就去
grep 'temporary password' /data/mysql/data/*.err查,别翻系统日志 - 首次登录后立刻执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourNewPass123';,否则 Navicat 等工具连不上
挂载云盘不是“多一步”,而是把 MySQL 的 IO 压力和数据可靠性从系统盘剥离的关键动作;但所有操作都依赖挂载点真实可用、权限彻底归属 mysql 用户、路径在配置中严格一致——这三个条件缺一不可,少验证任何一个,后面都会卡在启动或连接环节。


















