太心酸了,昨天电脑运行还好好的程序,今天一过来就说mysql服务启动不了了。让我想到了上次pyenv崩掉的过程噜😭
本机环境:macOs系统,用的homebrew安装的5.7和8.0版本的mysql。
报错现象和初步分析
这个错误表示客户端尝试通过 Unix 套接字文件 /tmp/mysql.sock 连接到本地 MySQL 服务器时失败了。错误码 (2) 通常表示找不到文件或目录。
于是我输入如下命令检查mysql服务是否正在运行
brew services list
发现服务没有启动,所以输入如下命令启动
brew services start mysql@5.7
结果报错如下:
这个报错实际上也没有更多的信息,大致意思就是说在尝试启动 MySQL 服务时遇到了问题。建议我们以 root 用户身份重新运行命令。
但是在 macOS 上,我们通常不需要以 root 用户身份运行 brew services 命令的。
所以尝试解决方案如下:
尝试1:重装大法
我上来就是一个😡
brew uninstall mysql@5.7
brew cleanup
brew install mysql@5.7
homebrew反手就给我一个😡
what can i say, what can i say man?🥹
这个错误表明 Homebrew 在尝试清理旧的安装包时遇到了权限问题。具体来说,Homebrew 无法删除 /usr/local/Cellar/node/21.7.0 目录,因为该目录不为空。
那么我们肯定要先看下这个目录是存放什么的。看名字就是和node.js有关的东西,与我们mysql没有关系。其实可以继续执行install命令了。
然后继续
brew services start mysql@5.7
和前面抱一样的错。重装大法,寄。
尝试2:查看日志并分析
日志文件通常位于/usr/local/var/mysql/
下,文件名一般是计算机名.err
,于是我使用如下命令
tail -n 100 /usr/local/var/mysql/EVYSHAN-MC0.err
输出内容如下:
关键信息为:
2024-04-07T03:18:34.527985Z 0 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4000!
丢给gpt,他说这个错误表明 InnoDB 数据字典中的表标志与 ibdata1 文件中的标志不一致。ibdata1 是 InnoDB 存储引擎的系统表空间文件,它包含了数据字典、撤销日志、双写缓冲区等重要数据。这种不一致通常是由于文件损坏或者不正确的 MySQL 升级操作导致的。
因为本机没有重要的数据,所以我选择重新初始化数据库
mysqld --initialize
遭遇报错如下:
可以看到它会去找8.0的mysql,于是我用指定路径再次初始化了一次。
- 首先停止mysql服务(如果它正在运行)
brew services stop mysql@5.7 brew services stop mysql
- 备份数据目录(可选,但推荐)
mv /usr/local/var/mysql/ /usr/local/var/mysql_backup/
- 删除先有数据目录
rm -rf /usr/local/var/mysql/*
- 初始化数据库
mysqld --initialize
然后注意,初始化成功后会显示一个临时密码
之后我们就根据这个密码来登陆mysql
brew services start mysql@5.7
mysql -u root -p
win!!!
最后注意更换密码嗷
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';