/etc/my.cnf
のMySQLデータディレクトリとソケットの場所を次のように変更しました。
[mysqld]
#--default datadir
#datadir=/var/lib/mysql
#--new datadir
datadir=/data/lib/mysql
#--default socket
#socket=/var/lib/mysql/mysql.sock
#--new socket
socket=/data/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# slow log
log-slow-queries=/var/log/mysqld-slow.log
long-query-time=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
#--default socket
#socket=/var/lib/mysql/mysql.sock
#--new socket
socket=/data/lib/mysql/mysql.sock
上記のようにmy.cnfを書き込んだ後、/etc/init.d/mysqld restart
を使用してmysqldを再起動しました。
mysql -uroot -ppassword
を使用してターミナル経由でMySQLに接続でき、データが正しく存在するため、問題はありません。
しかし、次のように単純なindex.phpでMySQLに接続しようとすると:
<?
$link = mysql_connect('localhost', 'root', 'password', TRUE);
echo $link;
?>
エラーが発生します:
Warning: mysql_connect(): Can't connect to local MySQL server through socket
'/var/lib/mysql/mysql.sock' (2) in /var/ww/html/index.php on line 3
明らかに/var/lib/mysql/mysql.sock
に変更したのに、なぜPHPが/data/lib/mysql/mysql.sock
を検索しようとしているのか理解できません。
通常のphp5_module
をロードする通常のApachev2.2.22を実行しています。
restart
とgraceful
の両方でApacheを再起動しました。
誰かが何が起こっているのか知っていますか?
これは通常、php.ini
構成ファイルで変更されます。
使用しているphpmysql拡張機能に応じて、設定は少し異なります。これらのプロパティを設定しない場合、mysql拡張機能は、コンパイル時に構成されたデフォルトを使用します。これは、おそらく/var/lib/mysql/mysql.sock
よりも多くなります。
使用している拡張子に関連するプロパティが正しく設定されたら、PHPコードを変更する必要はありません。
pdo_mysql
拡張機能を使用してMySQLサーバーに接続している場合、検索する構成は次のとおりです。
pdo_mysql.default_socket = /data/lib/mysql/mysql.sock
mysql
拡張子を使用している場合は、以下を構成します。
mysql.default_socket = /data/lib/mysql/mysql.sock
mysqli
extensionについては、以下を参照してください。
mysqli.default_socket = /data/lib/mysql/mysql.sock
私が最後にphpをいじってからしばらく経ちましたが、試すことができます
mysql_connect('localhost:/data/lib/mysql/mysql.sock', ........)
編集:チェックアウト http://php.net/manual/en/function.mysql-connect.php