确认当前datadir需先执行SELECT @@datadir;,macOS常见路径为/usr/local/var/mysql/或/opt/homebrew/var/mysql/;停服务须用brew services stop mysql或sudo launchctl unload,并ps验证进程消失;数据迁移应使用sudo rsync -avE保留扩展属性,再sudo chown -R _mysql:_mysql修正权限;配置文件中需同步修改[mysqld]和[client]段的datadir与socket路径;挂载盘须为APFS或Mac OS Extended格式且无noexec等限制参数。

确认当前 datadir 并停服务
别信 my.cnf 里写的路径,先连上 MySQL 执行:SELECT @@datadir;。macOS 上常见返回是 /usr/local/var/mysql/ 或 /opt/homebrew/var/mysql/(取决于安装方式)。停服务必须彻底:用 brew services stop mysql(Homebrew 安装)或 sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.mysql.plist(手动管理),然后 ps aux | grep mysqld 确认进程已消失。
复制数据并修正权限
macOS 没有 SELinux/AppArmor,但对 ACL 和 extended attributes 敏感。别用 cp -r,它会丢掉 socket 文件权限和隐藏属性;也别用 mv,InnoDB 可能拒绝加载损坏的文件系统元数据。正确做法是:
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
-
sudo rsync -avE --progress /usr/local/var/mysql/ /Volumes/Data/mysql/(-E保留扩展属性,-v显式反馈) -
sudo chown -R _mysql:_mysql /Volumes/Data/mysql(macOS 默认 MySQL 用户是_mysql,不是mysql) -
ls -le /Volumes/Data/mysql看是否带com.apple.quarantine属性——如果有,xattr -d com.apple.quarantine /Volumes/Data/mysql
改配置 + 同步 socket 路径
Homebrew 安装的 MySQL 配置文件通常在 /opt/homebrew/etc/my.cnf(Apple Silicon)或 /usr/local/etc/my.cnf(Intel)。编辑时注意两点:
- 在
[mysqld]段同时设置:datadir = /Volumes/Data/mysql和socket = /Volumes/Data/mysql/mysql.sock - 在
[client]段加一行:socket = /Volumes/Data/mysql/mysql.sock,否则mysql -u root会连不上 - 删掉所有
skip-grant-tables类调试配置,它们会让 MySQL 跳过系统表加载,启动后mysql库直接不可用
挂载盘需满足 macOS 特殊要求
目标路径必须挂载为支持 Unix 权限的格式(APFS 或 Mac OS Extended),不能是 exFAT/FAT32。检查命令:mount | grep "Volumes/Data",输出中应含 mounted by root 且无 noexec、nosuid、noowners 标志。如果挂载参数不对,重启前得重挂:sudo umount /Volumes/Data && sudo mount -t apfs -o nobrowse /dev/disk2s1 /Volumes/Data。启动失败时第一件事是看 tail -n 20 /usr/local/var/log/mysql/error.log,InnoDB 初始化失败通常卡在 ibdata1 校验或 .err 日志里写不出内容。

















