PHPから複数のMySQLに接続する

PHPから、MySQL4とMySQL5の両方に接続したかった。

アプリケーションAでは、MySQL4(ポート3306、/tmp/mysql.sock)へ接続する。

アプリケーションBでは、MySQL5(ポート3307、/tmp/mysql5.sock)へ接続する。

で、このように対処した。

 

■MySQL5へ接続するPHPプログラム

<?php
// MySQLへ接続する
ini_set("mysql.default_socket", '/tmp/mysql5.sock');
ini_set("mysql.default_port", '3307');
$link = mysql_connect( 'localhost:3307', 'root', 'password');
if ( ! $link ) {
die( '接続できませんでした: ' . mysql_error() );
} else {
echo '接続に成功しました';
}

// データベースmysql_dbを選択する。
$db_selected = mysql_select_db( "mysql_db", $link );
if ( ! $db_selected ) {
die ( "DBを選択できませんでした" . mysql_error() );
}
?>

▼MySQL5ではなく、MySQL4へ接続してしまう。 

$link = mysql_connect( 'localhost:/tmp/mysql5.sock', 'root', 'password');

▼接続時にエラー表示される。 

$link = mysql_connect( 'localhost:3307', 'root', 'password');

$link = mysql_connect( '127.0.0.1:3307', 'root', 'password');

▼表示されるエラー

Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in /export/home/web/public_html/test.php on line 5接続できませんでした: Client does not support authentication protocol requested by server; consider upgrading MySQL client

 

■対応策

consider upgrading MySQL client と言われているので、PHPそのものをアップグレードした方がよいと思われる。

インストールした順序は、

1. MySQL4

2. PHP4

3. MySQL5

なので、PHPは、MySQL4のバイナリか何かを利用してMySQL5へ接続しようとしている可能性があると思い、試してみた。

▼MySQL5のクライアントソフトからMySQL4へ接続してみる。(上手くいく)

$ /usr/local/mysql5/bin/mysql --port=3306 -u root -p 

▼MySQL4のクライアントソフトからMySQL5へ接続してみる。(MySQL4へ接続されてしまう)

$ /usr/local/mysql4/bin/mysql --port=3307 -u root -p

 

よって、PHPが新しいMySQL5のクライアントを指定するようなコンパイルをして再インストールしてあげないといけなさそう。

 

今は、時間がないので、今度試してみる。