I recently upgraded my MacPorts-based PHP install to 5.3 and thought I’d try out this new mysqlnd client library. So I did this:
sudo port -f uninstall php5 sudo port install php5 +apache2+macports_snmp+mysqlnd+pear
All appeared to work fine, but trying to connect to my database server from PHP gave me an error:
PHP Warning: mysqli::mysqli(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in /Users/mike/Sites/database.php on line 13
PHP Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in /Users/mike/Sites/database.php on line 13
By default, any connections to “localhost” are handled through UNIX sockets, which are referred to by file names. In this case, mysqlnd seems to be checking /tmp/mysql.sock
, even though the MacPorts MySQL likes to use /opt/local/var/run/mysql5/mysqld.sock
. The reason this used to work is that the older client library was actually part of MySQL so the defaults for both were the same. Now that the library is part of PHP, things have changed. We’ll fix this problem by telling MySQL to put the socket file somewhere else; you can’t tell mysqlnd where to put it, without recompiling PHP. And if we wanted to compile stuff, we wouldn’t be using MacPorts!
Edit /opt/local/etc/mysql5/my.cnf
to add these commands:
[mysqld] socket=/tmp/mysql.sock [client] socket=/tmp/mysql.sock
The client
section affects all clients, such as mysql
and mysqldump
; they can also be specified separately if desired.
One Reply to “MacPorts upgrade to mysqlnd”
Comments are closed.