Mac下Codeigniter异常:未安装MySQL却可访问旧硬盘数据库
这情况我之前碰到过类似的,核心原因其实很简单:你的CodeIgniter项目用了旧硬盘上MySQL的专属连接配置,但终端和MySQL Workbench默认只会找系统默认路径下的MySQL程序和配置,新硬盘没装MySQL,自然找不到——但项目的配置直接指向了旧硬盘里还能正常读取的MySQL资源,所以能连上。
下面是具体的解决步骤,按顺序来就行:
第一步:先搞清楚CodeIgniter是怎么连上的
先打开你的CodeIgniter项目的数据库配置文件,一般在application/config/database.php,找到数据库连接的配置段,重点看这几个字段:
$db['default'] = array( // ... 其他配置省略 'socket' => '/Volumes/你的旧硬盘名称/mysql/mysql.sock', // 大概率是这个自定义的socket路径 'hostname' => 'localhost', 'port' => '3306' );
这里的socket字段就是关键——它直接指定了旧硬盘上MySQL的socket文件路径,这就是CodeIgniter能连上的原因。把这个路径记下来,后面要用到。
第二步:让终端能访问MySQL
终端输入mysql提示找不到命令,是因为系统的PATH环境变量里没有旧硬盘上MySQL的二进制文件路径。你需要把旧硬盘的MySQL bin目录加入环境变量:
临时生效(只在当前终端窗口有用)
在终端里输入:
export PATH="/Volumes/你的旧硬盘名称/usr/local/mysql/bin:$PATH"
之后用下面的命令连接,记得替换成你的用户名和刚才找到的socket路径:
mysql -u 你的MySQL用户名 -p --socket=/Volumes/你的旧硬盘名称/mysql/mysql.sock
输入密码后应该就能进入MySQL命令行了。
永久生效(所有新终端窗口都能用)
编辑你的shell配置文件:
- 如果你用的是zsh,编辑
~/.zshrc - 如果你用的是bash,编辑
~/.bash_profile
在文件末尾加一行:
export PATH="/Volumes/你的旧硬盘名称/usr/local/mysql/bin:$PATH"
保存后执行source ~/.zshrc(或者对应的配置文件),之后新开终端就能直接用mysql命令了,不过连接时还是要指定socket路径,和上面的命令一样。
第三步:让MySQL Workbench能连接
Workbench连不上是因为它默认用系统的socket路径,你需要手动配置自定义连接:
- 打开MySQL Workbench,点击左上角的
+号新建连接 - 在弹出的配置窗口里:
- 连接名称随便填,比如“旧硬盘MySQL”
- 连接方式选择「Local Socket/Pipe」
- 在「Socket Path」里填入你刚才从CodeIgniter配置里找到的那个路径(比如
/Volumes/你的旧硬盘名称/mysql/mysql.sock) - 用户名填你的MySQL用户名(比如root)
- 密码可以勾选「Store in Keychain」方便后续使用
- 点击「Test Connection」测试,成功的话就能保存连接并正常使用了。
重中之重:先备份数据!
你的旧硬盘已经故障了,现在能访问只是暂时的,随时可能彻底挂掉——先把数据库备份出来放在可靠的地方才是最优先的事!
用终端连上MySQL后,执行下面的备份命令(替换成你的信息):
mysqldump -u 你的MySQL用户名 -p --socket=/Volumes/你的旧硬盘名称/mysql/mysql.sock 你的数据库名称 > /Volumes/可靠的外接硬盘/你的备份文件名.sql
备份完成后,建议尽快在新硬盘上安装MySQL,把备份的数据导入进去,彻底摆脱故障旧硬盘的依赖。
内容的提问来源于stack exchange,提问作者Arthur Bello

