Codeigniter连接CloudSQL报错:HY000/2002 No such file or directory
CodeIgniter连接CloudSQL报HY000/2002错误的解决办法
嘿,我之前也帮人处理过一模一样的问题,这个mysqli_connect(): (HY000/2002): No such file or directory错误本质是CodeIgniter找不到正确的MySQL连接路径——毕竟CloudSQL的连接逻辑和本地装的MySQL完全不一样,给你分场景整理了几个解决步骤:
先明确你的部署场景
这个错误的核心解决思路分两种情况,先搞清楚你是本地开发环境连接CloudSQL,还是把CodeIgniter部署在Google App Engine(GAE)上连接,两种配置完全不同。
场景1:本地开发环境连接CloudSQL
本地直接连CloudSQL会因为网络权限和socket路径问题报错,最稳妥的方式是用Cloud SQL Auth Proxy做中转:
- 先下载对应系统的Cloud SQL Auth Proxy工具,然后启动它:
# 替换成你的CloudSQL实例信息:项目ID:区域:实例名 ./cloud_sql_proxy -instances=your-project-id:your-region:your-instance-name=tcp:3306 - 修改CodeIgniter的
application/config/database.php配置,把hostname改成本地代理的地址:$db['default'] = array( 'dsn' => '', 'hostname' => '127.0.0.1', // 代理监听本地3306端口 'username' => '你的CloudSQL数据库用户名', 'password' => '你的CloudSQL数据库密码', 'database' => '要连接的数据库名', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
场景2:CodeIgniter部署在GAE上连接CloudSQL
这种情况不需要用Auth Proxy,直接用CloudSQL提供的Unix socket路径即可:
修改application/config/database.php里的hostname为CloudSQL的socket路径:
$db['default'] = array( 'dsn' => '', // 替换成你的CloudSQL实例信息 'hostname' => '/cloudsql/your-project-id:your-region:your-instance-name', 'username' => '你的CloudSQL数据库用户名', 'password' => '你的CloudSQL数据库密码', 'database' => '要连接的数据库名', 'dbdriver' => 'mysqli', // 其他配置保持原有设置即可 );
额外的几个检查点
- 确认你的CloudSQL实例处于运行状态,用户名和密码完全正确
- 如果你非要用公网IP直接连接(不推荐本地开发用,不安全),记得在CloudSQL的「授权网络」里添加你的本地公网IP
- 检查PHP环境是否已经启用了mysqli扩展,CodeIgniter的mysqli驱动依赖这个扩展
内容的提问来源于stack exchange,提问作者Fellipe Augusto
相关产品推荐
相关产品推荐

