php 连接mysql的问题
当前我的情况是安装上mysql配置了my.cnf中的socket,并且在指定位置也生成了 mysql.sock 的sock文件,此时我通过php.ini来设置php连接mysql.sock的文件,但是不管怎么修改,从php.info中看到对应的mysql.sock的文件路径都是同一个位置,我设置的属性也不生效。
1 2 3 4 5 6 7 | vim /etc/php.ini mysql.default_socket = /data/svr/mysql/mysql_3306/tmp/mysql.sock pdo_mysql.default_socket= /data/svr/mysql/mysql_3306/tmp/mysql.sock mysqli.default_socket = /data/svr/mysql/mysql_3306/tmp/mysql.sock |
nm,怎么还是连接这里
nm,有完没完了
这个也添乱!!
Google了数篇文章,通过自己的消化理解,大致上了解了错误的原因:当初编译安装MySQL和PHP的时候,没有通过编译参数去指定MySQL的Socket路径,于是程序就把其Socket路径的默认值/bar/mysql.sock给编译进去了。之后实际运行的时候,通过配置文件更改了Socket路径到/foo/mysql.sock,因为所有配置文件的所有相关小节我都设置成一致的新路径,所以MySQL自己的命令行客户端、PHP的mysql扩展、PHP的mysqli扩展均能正常工作,都按照指定的新的路径去连接Socket。但是偏偏PDO抽风,根本不理会设置值,只是一门心思的按照编译中指定的值去连接,所以导致出错(猜测或者不是因为PDO执着,而是PHP本身的关系,因为我pdo_mysql是编译进PHP主程序的,而不是通过so扩展。phpinfo中的MYSQL_SOCKET值应该就是编译的默认值)。
据我消化理解来的知识,似乎此问题没有办法通过配置文件解决,MYSQL_SOCKET根本无从修改,估计是编译定死了,变成PHP或者PDO的一个静态常量了。唯一的解决途径就是重新编译PDO(如果它是so扩展)或者重新编译整个PHP(就是我这种,PDO是被编译进PHP的情况)。
于是,我的解决办法是,妥协!我把所有设置从/foo/mysql.sock改回成编译默认值的/bar/mysql.sock,PDO终于不报错了,可以正常连接了。
以下是我的问题所在
'./configure' '--prefix=/opt/svr/php5.3.10' \ '--with-config-file-path=/opt/svr/php5.2.1/etc' \ '--with-mysql=/data/svr/mysql/mysql_3306' \ '--with-mysqli=/data/svr/mysql/mysql_3306/bin/mysql_config' \ '--with-pdo-mysql=/data/svr/mysql/mysql_3306' \ '--with-zlib' '--enable-xml' \ '--disable-rpath' \ '--enable-bcmath' \ '--enable-shmop' \ '--enable-sysvsem' \ '--with-curl' \ '--enable-fpm' \ '--with-mcrypt' \ '--with-gd' \ '--with-openssl-dir=/usr/lib64/openssl/' \ '--with-mhash' \ '--enable-socket' \ '--with-ldap' \ '--with-ldap-sasl' \ '--with-xmlrpc' \ '--enable-zip' \ '--enable-soap' \ '--enable-pdo' \ '--with-pdo-mysql=/usr' \ '--with-jpeg-dir=/usr/lib' \ '--with-png-dir=/usr/lib' \ '--with-iconv=/usr/local/include/' \ '--enable-fastcgi'
命名我的mysql是安装在 /data/svr/mysql/mysql_3306', 最后我却把 --with-pdo-mysql配置在了/usr 下。所以最后你就算跳过编译错误这段,继续make make install 并且成功了,php在使用pdo_mysql
的时候肯定会去/usr/这个路径下找mysql ,所以就找不到了
· 本可避免的P1事故:Nginx变更导致网关请求均响应400
· 还在手写JSON调教大模型?.NET 9有新玩法
· 复杂业务系统线上问题排查过程
· 通过抓包,深入揭秘MCP协议底层通信
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 我只说需求,AI 全程托管,代码自己长出来了!
· 推荐 6 款基于 .NET 开源的串口调试工具,调试效率提升利器!
· 《HelloGitHub》第 112 期
· 大模型的JSON之殇:从脆弱的API调用到稳健的未来
· Abp vNext -动态 C# API 实现原理解析