CodeIgniterを使用してリモートデータベースに接続する

指定された設定を使用してデータベースサーバーに接続できません。

アプリケーションをリモートデータベースに接続するのが難しいです。アプリケーションを実行すると、上記のエラーが表示されます。私はこのサイトのこの質問に対する以前の回答を見てきましたが、私はそれを解決するのに運がなかったのです。私が学んだことから、私はホスト名を置き換えて、mysqlデータベースが外部接続を受け入れるようにする必要があります。私はmysqlのコマンドラインからdatabase.phpに同じ値を試してみました。

だから私は他に何が欠けているだろうか?

database.phpの設定は次のとおりです:

$active_group = 'staging';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'myDatabase';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$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;

$db['staging']['hostname'] = 'XX.XX.XXX.XXX';
$db['staging']['username'] = 'user';
$db['staging']['password'] = 'pwd';
$db['staging']['database'] = 'myDatabase';
$db['staging']['dbdriver'] = 'mysql';
$db['staging']['dbprefix'] = '';
$db['staging']['pconnect'] = TRUE;
$db['staging']['db_debug'] = TRUE;
$db['staging']['cache_on'] = FALSE;
$db['staging']['cachedir'] = '';
$db['staging']['char_set'] = 'utf8';
$db['staging']['dbcollat'] = 'utf8_general_ci';
$db['staging']['swap_pre'] = '';
$db['staging']['autoinit'] = TRUE;
$db['staging']['stricton'] = FALSE;
7
私は私の質問を私のデータベース設定で編集しました。
追加された 著者 Mikey,
あなたはこれまでどのように試しましたか?データベース設定のコードを与えてください。
追加された 著者 Ariful Islam,
それは正しいようです。
追加された 著者 Ariful Islam,

4 答え

シェルからこのコマンドを試して、接続できるかどうか確認してください:

mysql -h HOSTNAME -uUSERNAME -p DATABASE

あなたが実際のポートセットを定義しない限り、デフォルトでcodeigniterが3306に接続するように、mysqlに接続する別のポートを持っていないかどうかを確認してください。これは問題かもしれません。

がんばろう

4
追加された
私はそのコマンドを使用して接続できます。ポートは違いはありません。
追加された 著者 Mikey,
以前のコメントを削除して申し訳ありませんが、私はあなたのコマンドを正しく書いていないことに気付きました。いいえ、私はそのようなステージング設定を使用していません。いいえ、私はデータベースをコンストラクタにロードするだけです:$ this-> CI-> load-> database()。
追加された 著者 Mikey,
私が知ったことから、正しいグループがロードされます。システム/ database/drivers/mysql/mysql_driverの70行目で、@ mysql_connect($ this-> hostname、$ this-> username、$ this-> password、TRUE)を返します。 。しかし、それは失敗しているこの行です。このエラーは、この質問を参照してください。とにかく、ありがとうございました!
追加された 著者 Mikey,
それは助けられましたが、私の問題を解決しませんでした。
追加された 著者 Mikey,
私のエラーの原因は、使用されていた古いパスワードスキームが原因でしたMySQL 4.1より前。残念ながら私はMySQLサーバの制御ができませんでしたので、PHPバージョンをダウングレードする必要がありました。
追加された 著者 Mikey,
はい、mysqlプロンプトが表示されるはずですが、exeを使用しているのでWindowsのように見えます。このコマンドはUNIXベースのマシンを対象としています。 $ this-> db_staging = $ this-> CI-> load-> database( 'staging'、TRUE); のように、ステージング設定を使用していますか?
追加された 著者 Robert Van Sant,
OKですが、2つの定義が定義されており、配列なのでデフォルト定義が返されるため、接続定義を指定する必要があります。私はあなたがあなたのステージングサーバー上で実行しているローカルホストdbを持っていないが、リモート接続が失敗し、そのエラーをプロンプトするために使用する接続を定義することをお勧めします
追加された 著者 Robert Van Sant,
これは助けてくれましたか?
追加された 著者 Robert Van Sant,
あなたのリモートデータベースを使用しているドライバは、あなたのmysql設定(mysql.cnf、私は信じています)をチェックして、mysqliとmysqlを使用していないことを確認してください
追加された 著者 Robert Van Sant,

mysqlはデフォルトでlocalhost接続のみを受け付けますが、サーバがローカルに正しく設定されていることを確認してください

http:// www .cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

サーバーがプライベートサブネットにあるルーターの背後にないことを確認してください。サーバーをWebにポートフォワーディングするための静的NATを構成する必要はありません

3
追加された
$active_group = 'staging';
$active_record = TRUE;

上記のコードを

$active_group = 'default';
$active_record = TRUE;
1
追加された

サーバーでSELinuxポリシーを実施している場合は、httpd_can_network_connectブールフラグを有効にしてください

setsebool -P httpd_can_network_connect=1
0
追加された