web-dev-qa-db-ja.com

PHP datadirを変更した後、MySQLに接続できません

/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を実行しています。

restartgracefulの両方でApacheを再起動しました。

誰かが何が起こっているのか知っていますか?

2
ashiina

これは通常、php.ini構成ファイルで変更されます。

使用しているphpmysql拡張機能に応じて、設定は少し異なります。これらのプロパティを設定しない場合、mysql拡張機能は、コンパイル時に構成されたデフォルトを使用します。これは、おそらく/var/lib/mysql/mysql.sockよりも多くなります。

使用している拡張子に関連するプロパティが正しく設定されたら、PHPコードを変更する必要はありません。

pdo_mysql

pdo_mysql拡張機能を使用してMySQLサーバーに接続している場合、検索する構成は次のとおりです。

pdo_mysql.default_socket = /data/lib/mysql/mysql.sock

mysql

mysql拡張子を使用している場合は、以下を構成します。

mysql.default_socket = /data/lib/mysql/mysql.sock

mysqli

mysqliextensionについては、以下を参照してください。

mysqli.default_socket = /data/lib/mysql/mysql.sock
1
Tonin

私が最後にphpをいじってからしばらく経ちましたが、試すことができます

mysql_connect('localhost:/data/lib/mysql/mysql.sock', ........)

編集:チェックアウト http://php.net/manual/en/function.mysql-connect.php

1
thanosk