Mac崩溃后MAMP中MySQL无法启动,如何移除故障数据库?
Mac崩溃后,MAMP中的MySQL无法启动(Apache可正常运行),错误日志指向已废弃的drupal8/cache_menu数据库,希望删除该数据库但无法正常启动MySQL。
已尝试的操作
- 终止所有MySQL进程
- 在
/Applications/MAMP/tmp/mysql/my.cnf中依次设置innodb_force_recovery=1、2、3 - 在
/Applications/MAMP/conf目录下创建了内容相同的my.cnf(参考资料提示该方法可能有效)
错误日志
[ERROR] InnoDB: Trying to access page number 32 in space 580, space name drupal8/cache_menu, which is outside the tablespace bounds. Byte offset 0, len 16384, i/o type read. If you get this error at mysqld startup, please check that your my.cnf matches the ibdata files that you have in the MySQL server.
[ERROR] InnoDB: Server exits.
后续尝试及问题
尝试通过以下命令启动MySQL:
/Applications/MAMP/Library/bin/mysqld --skip-grant-tables --user=mysql --skip-external-locking --port=3306 --sock=/Applications/MAMP/tmp/mysql/mysql.sock
报错:
unknown variable 'sock=/Applications/MAMP/tmp/mysql/mysql.sock'
更新内容:
可通过命令行启动MySQL:
/Applications/MAMP/bin/startMysql.sh
但无法通过MAMP对话框窗口启动,同时PhpMyAdmin报错:
PHP 5.5+ is required.
Currently installed version is: 5.4.45
解决步骤
1. 修正命令行启动参数并删除故障数据库
你之前的启动命令中--sock是缩写错误,MySQL需要完整参数--socket,修正后启动命令:
/Applications/MAMP/Library/bin/mysqld --skip-grant-tables --user=mysql --skip-external-locking --port=3306 --socket=/Applications/MAMP/tmp/mysql/mysql.sock
启动成功后,用终端连接MySQL:
/Applications/MAMP/Library/bin/mysql -u root -S /Applications/MAMP/tmp/mysql/mysql.sock
执行SQL删除目标数据库(或单独删除故障表):
-- 删除整个drupal8数据库 DROP DATABASE drupal8; -- 若仅需删除单个故障表 USE drupal8; DROP TABLE cache_menu;
操作完成后,关闭MySQL进程,将my.cnf中的innodb_force_recovery改回0(或注释该配置项),再正常启动MySQL。
2. 修复MAMP对话框启动失败问题
命令行能启动说明MySQL本身无问题,界面启动失败大概率是配置冲突:
- 删除
/Applications/MAMP/conf下自行创建的my.cnf,保留/Applications/MAMP/tmp/mysql/my.cnf即可 - 检查MAMP偏好设置中的MySQL端口、套接字路径,确保与配置文件一致
3. 解决PhpMyAdmin版本兼容问题
PhpMyAdmin要求PHP5.5+,当前版本为5.4.45,可通过两种方式处理:
- 打开MAMP偏好设置→PHP标签,选择预装的5.5及以上PHP版本(若MAMP提供)
- 下载适配PHP5.4的旧版PhpMyAdmin,替换
/Applications/MAMP/bin/phpMyAdmin目录下的全部内容
内容的提问来源于stack exchange,提问作者nschildre

