0

私は 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
4

2 に答える 2

0

GRANT ALL ON appdb.* TO appuser@'10.10.10.1' identified by 'passw0rd';アプリがIPで実行されている間も行う必要があります10.10.10.1

于 2013-08-14T04:25:15.173 に答える