私は Codeigniter を使用して web アプリケーションを開発しています。通常、同じサーバーでホストされている apache と mysql サーバー。今日、私はそれらを分けなければなりません。
10.10.10.1 - apache
10.10.10.2 - mysql
これら 2 つは今すぐ互いに ping を実行できます。これは、mysql サーバー上の my.cnf ファイルです。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address=10.10.10.2
old_passwords=0
私は mysql サーバーを 10.10.10.2 の IP アドレスにバインドしています。これらの 2 つのサーバーのため、2 つの異なるインターフェイスがあります。
その後、そのクエリを使用してmysqlサーバーにユーザーを作成しました。
GRANT ALL ON appdb.* TO appuser@'10.10.10.2' identified by 'passw0rd';
テストのために、私はその小さなphpスクリプトを書き、10.10.10.1のIPアドレスを持つApacheサーバーで実行します..
<?php
$username = "appuser";
$password = "passw0rd";
$hostname = "10.10.10.2";
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
//select a database to work with
$selected = mysql_select_db("appdb",$dbhandle)
or die("Could not select examples");
$result = mysql_query("SELECT @@version");
print_r(mysql_fetch_array($result));
mysql_close($dbhandle);
?>
すべて順調!結果が返ってきます。mysql サーバーで tcpdump を開始すると、応答の tcp ストリームが表示されました。
これが私のcodeigniter database.phpファイルです
$db['default']['hostname'] = '10.10.10.2';
$db['default']['port'] = '3306';
$db['default']['username'] = 'appuser';
$db['default']['password'] = 'passw0rd';
$db['default']['database'] = 'appdb';
$db['default']['dbdriver'] = 'mysqli';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
コントローラーとモデルファイルですべてが正常であることを確認してください。コントローラーにテストメソッドを書きました。
public function test()
{
$query = $this->db->query("select @@version");
print_r($query->result());
}
ブラウザに出力
Array ( )
mysqlサーバーでtcpdump -vvv -i eth1を開始して、tcp接続がdbサーバーに接続されていることを確認しますか? そして、ブラウザでテスト関数を呼び出すときに開かれているtcp接続がないと確信しています。まもなく; CI は MySQL サーバーに接続しません。そして、私は理由を理解できませんか?
何か案が ?
君たちありがとう。
PS : 最初の $db['default']['db_debug'] は TRUE です。db_debug が TRUE として定義されているときにブラウザでページを取得すると、そのエラーが発生します。その問題を修正するために FALSE に変更しました。しかし、mysql サーバーとして locahost を使用している間は、db_debug に問題はないと確信しています。リモートサーバーに変更すると、エラーが発生しました。
Unable to connect to your database server using the provided settings.
Filename: core/Loader.php
Line Number: 346