Ok, it's actually PHP 4.4.7 and MySQL 5.0.x!
On my Mac Mini (Intel) I've got Mac OS X 10.4.10 and it comes with it's own Apache Server, in fact all Mac OSX distributions have Apache built in.
I don't remember, but apparently sometime I had installed PHP 4.4.7 and PHP 5 (to use both) I wanted to get MySQL on it because I wanted to start developing some serious web stuff locally...
Since the unfortunate total disappearance a month ago of the last web host I had used... and subsequently lost everything I was working on because I was developing it on their server(s) -- Bad mistake: Not backing anything up just because I didn't have MySQL!
So I got the latest MySQL 5.0.45 release for Mac OS X in the easy installer package format.
I proceeded to install it and checked to see if it worked with PHP 5 using PHPMyAdmin.
AND... Giddy it worked!
Now I go into the Terminal.app Unix Shell Application and type:
sudo cp /etc/httpd/php4.httpd.conf /etc/httpd/httpd.conf
Switch to PHP 4 and reload the PHPMyAdmin... And I'm Greeted with:
Error
MySQL said:
#2002 - The server is not responding (or the local MySQL server's socket is not correctly configured)
What On Earth!!
I have no idea what that really means...
So I spent the good part of four days researching and trying a bunch of crap to get it to work... by changing the php.ini file by changing the line...
; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket =
TO:
; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket =/tmp/mysql.sock
Restart the Apache Server and try to reload PHPMyAdmin...
And to no avail I still see...
Error
MySQL said:
#2002 - The server is not responding (or the local MySQL server's socket is not correctly configured)
So after taking a break and coming back I think of linking the mysql socket to where PHP 4 is looking for it....
mysql
| MySQL Support | enabled | 
|---|---|
| Active Persistent Links | 0 | 
| Active Links | 0 | 
| Client API version | 4.1.22 | 
| MYSQL_MODULE_TYPE | external | 
| MYSQL_SOCKET | /var/mysql/mysql.sock | 
| MYSQL_INCLUDE | -I/usr/include/mysql | 
| MYSQL_LIBS | -L/usr/lib/mysql -lmysqlclient | 
... In... /var/mysql/mysql.sock
And The info for PHP 5, which works with MySQL is:
mysql
| MySQL Support | enabled | 
|---|---|
| Active Persistent Links | 0 | 
| Active Links | 0 | 
| Client API version | 5.0.19 | 
| MYSQL_MODULE_TYPE | external | 
| MYSQL_SOCKET | /tmp/mysql.sock | 
| MYSQL_INCLUDE | -I/usr/local/php5/include/mysql | 
| MYSQL_LIBS | -L/usr/local/php5/lib/mysql -lmysqlclient | 
So why not create an alias linking /var/mysql/mysql.sock to /tmp/mysql.sock
Not being so fluent in Unix Command-Line stuff, I struggled to figure out how to do this and found this site... Here's what I did (the clean and easy to follow version):
- Create 'mysql' folder in /var/
 - Create A Link Of /tmp/mysql.sock As /var/mysql/mysql.sock
 - Restart The Apache Server
 
The Commands:
$ sudo mkdir /var/mysql/
$ sudo ln /tmp/mysql.sock /var/mysql/mysql.sock
$ sudo apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted
And ooh-la-la it works!
Sure it's probably a bit unorthadox, and PHP 4 only has Client API for 4.1.22... but MySQL doesn't change much on the front-end I'm assuming so it should be pretty good.
Everything was confirmed working after creating and editing the same table in MySQL 5 using PHP 4 and PHP 5
Update:
It has come to my attention that though the above may work... it may not work as well as it should...
Because I've run into the instance where the link I would create using $ sudo ln /tmp/mysql.sock /var/mysql/mysql.sock would disappear from /var/mysql/mysql.sock when switching from PHP 4 to PHP 5 and back to PHP 4 again after I restart somewhere in between I think.
I'm not sure where it is breaking down... but there's a couple more robust solutions that I'd suggest... and that is to change the standard link using the ln command to a symbolic link using the ln -s command in terminal.
So now the commands would now be:
$ sudo mkdir /var/mysql/
$ sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
$ sudo apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted
Or you can do what I did, and just make the folder /var/mysql a symbolic link... which is a little less work:
$ sudo ln -s /tmp/ /var/mysql/
$ sudo apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted
Note: if you want to do the above there can't be a folder
/var/mysql/already, you'll need to delete it. This can be done using:
$ rm -r /var/mysql/
These commands should work better because of the difference between a hard link and a symbolic link...
A hard link (ln) disappears if the linked-to file disappears... and a symbolic link (ln -s) remains even if the linked-to file disappears and for this situation is what we need since mysql.sock seems to disappear somewhere along the lines of a restart or as described above.
Plus, since symbolic links allow you to have a folder point to another destination folder you can do $ sudo ln -s /tmp/ /var/mysql/
Disclaimer: I take no responsibility for what happens to your system if you use these instructions. Though I have been able to use this methods successfully your results may vary. It is highly advisable you backup any files before changing or modifying them.

2 comments:
Thanks! Worked flawlessly
Many thanks for posting this. You saved me from spending a few more hours tearing out my hair over this one!
Post a Comment