質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

1825閲覧

AWSのAuroraにFuelPHPのoilコマンドでマイグレーションしたい

kkit

総合スコア13

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2018/11/26 05:54

前提・実現したいこと

EC2(Amazon Linux2)にFuelPHP1.8.1をインストールし、環境構築をしているのですが、oil refine migrateから先に進めず、途方に暮れています。
実現したいことは、AWSのAuroraに作成済のデータベースに、oilコマンドでマイグレーションファイルをテーブル化することです。
エラーを検索してネットに書いてあることは試してみたのですが、状況が改善されないため、こちらに質問させていただきました。よろしくお願いいたします。

状況

php oil g model...
により
001_create_posts.php というマイグレーションファイルを作成。

EC2にログインの上、

php oil refine migrate

をすると、下記のエラーメッセージが出ます。

発生している問題・エラーメッセージ

Uncaught exception Fuel\Core\Database_Exception: 2002 - SQLSTATE[HY000] [2002] Permission denied in /var/www/nex/fuel/core/classes/database/pdo/connection.php on line 86 Callstack: #0 /var/www/nex/fuel/core/classes/database/pdo/connection.php(148): Fuel\Core\Database_PDO_Connection->connect() #1 /var/www/nex/fuel/core/classes/database/schema.php(177): Fuel\Core\Database_PDO_Connection->query(1, 'SELECT * FROM `...', false) #2 [internal function]: Fuel\Core\Database_Schema->table_exists('migration') #3 /var/www/nex/fuel/core/classes/database/connection.php(342): call_user_func_array(Array, Array) #4 /var/www/nex/fuel/core/classes/dbutil.php(387): Fuel\Core\Database_Connection->schema('table_exists', Array) #5 /var/www/nex/fuel/core/classes/migrate.php(641): Fuel\Core\DBUtil::table_exists('migration') #6 /var/www/nex/fuel/core/classes/migrate.php(74): Fuel\Core\Migrate::table_version_check() #7 [internal function]: Fuel\Core\Migrate::_init() #8 /var/www/nex/fuel/core/classes/autoloader.php(377): call_user_func('Migrate::_init') #9 /var/www/nex/fuel/core/classes/autoloader.php(249): Fuel\Core\Autoloader::init_class('Migrate') #10 [internal function]: Fuel\Core\Autoloader::load('Migrate') #11 /var/www/nex/fuel/core/tasks/migrate.php(283): spl_autoload_call('Migrate') #12 /var/www/nex/fuel/core/tasks/migrate.php(197): Fuel\Tasks\Migrate::_run('default', 'app') #13 /var/www/nex/fuel/core/base56.php(37): Fuel\Tasks\Migrate->__call('_run', Array) #14 /var/www/nex/fuel/packages/oil/classes/refine.php(106): call_fuel_func_array(Array, Array) #15 [internal function]: Oil\Refine::run('\Fuel\Tasks\Mig...', Array) #16 /var/www/nex/fuel/packages/oil/classes/command.php(124): call_user_func('Oil\Refine::run', 'migrate', Array) #17 /var/www/nex/oil(68): Oil\Command::init(Array) #18 {main} Previous exception: Uncaught exception PDOException: 2002 - SQLSTATE[HY000] [2002] Permission denied in /var/www/nex/fuel/core/classes/database/pdo/connection.php on line 470 Callstack: #0 /var/www/nex/fuel/core/classes/database/pdo/connection.php(470): PDO->__construct('mysql:host=loca...', 'root', 'root', Array) #1 /var/www/nex/fuel/core/classes/database/pdo/connection.php(72): Fuel\Core\Database_PDO_Connection->_connect() #2 /var/www/nex/fuel/core/classes/database/pdo/connection.php(148): Fuel\Core\Database_PDO_Connection->connect() #3 /var/www/nex/fuel/core/classes/database/schema.php(177): Fuel\Core\Database_PDO_Connection->query(1, 'SELECT * FROM `...', false) #4 [internal function]: Fuel\Core\Database_Schema->table_exists('migration') #5 /var/www/nex/fuel/core/classes/database/connection.php(342): call_user_func_array(Array, Array) #6 /var/www/nex/fuel/core/classes/dbutil.php(387): Fuel\Core\Database_Connection->schema('table_exists', Array) #7 /var/www/nex/fuel/core/classes/migrate.php(641): Fuel\Core\DBUtil::table_exists('migration') #8 /var/www/nex/fuel/core/classes/migrate.php(74): Fuel\Core\Migrate::table_version_check() #9 [internal function]: Fuel\Core\Migrate::_init() #10 /var/www/nex/fuel/core/classes/autoloader.php(377): call_user_func('Migrate::_init') #11 /var/www/nex/fuel/core/classes/autoloader.php(249): Fuel\Core\Autoloader::init_class('Migrate') #12 [internal function]: Fuel\Core\Autoloader::load('Migrate') #13 /var/www/nex/fuel/core/tasks/migrate.php(283): spl_autoload_call('Migrate') #14 /var/www/nex/fuel/core/tasks/migrate.php(197): Fuel\Tasks\Migrate::_run('default', 'app') #15 /var/www/nex/fuel/core/base56.php(37): Fuel\Tasks\Migrate->__call('_run', Array) #16 /var/www/nex/fuel/packages/oil/classes/refine.php(106): call_fuel_func_array(Array, Array) #17 [internal function]: Oil\Refine::run('\Fuel\Tasks\Mig...', Array) #18 /var/www/nex/fuel/packages/oil/classes/command.php(124): call_user_func('Oil\Refine::run', 'migrate', Array) #19 /var/www/nex/oil(68): Oil\Command::init(Array) #20 {main}

試したこと

①mysql.sockを下記に配置(mysql.sockの中身は空)
/var/lib/mysql/mysql.sock

②php.iniの設定を下記のように追記
mysql.default_socket = /var/lib/mysql/mysql.sock
pdo.mysql.default_socket = /var/lib/mysql/mysql.sock

③FuelPHPのapp/config/db.phpのdbnameのおしりに「unix_socket=/var/lib/mysql/mysql.sock」を追記

PHP

1return array( 2 'default' => array( 3 'connection' => array( 4 'dsn' => 'mysql:host={Auroraのクラスターエンドポイント};dbname={DB名};unix_socket=/var/lib/mysql/mysql.sock', 5 'username' => '{ユーザー名}', 6 'password' => '{マスターパスワード}', 7 ), 8 ), 9);

★それぞれの環境毎のdb.phpファイルにも同様の記述をしています。

補足情報(FW/ツールのバージョンなど)

OSはAmazon Linux2、DBはAurora(mysql)、FuelPHPのバージョンは1.8.1です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Auroraを使うということは、RDS を使う、要するにリモートで DB を使うということですよね?
unix_socket の設定は不要なのでは?

投稿2018/11/27 02:49

ssasaki

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kkit

2018/11/27 02:56

回答ありがとうございます。 はい、リモートでDBを使うということです。 エラーメッセージでググったらunix_socketを設定すると解決するとあったので試してみたのですが、検討違いだったようですね。 unix_socketの代わりにAuroraのポート番号を設定して試してみたりもしたのですが、やはり接続できませんでした。何か見るべき箇所などありましたら教えていただけるとありがたいです。
ssasaki

2018/11/27 03:03

RDSは何度も使っていますが、普通にDBサーバを使う感覚で FuelPHP で使えています。 unix_socket の設定を外した状態でも、Permission denied が出るのでしょうか? エンドポイントや DB名、ユーザー、パスワードの情報が正しいことは確実(コマンドラインで接続ができる)なのですよね?
kkit

2018/11/28 00:56

回答ありがとうございます。 unix_socketを外した状態でもエラーメッセージは変わりません。 Auroraなのでクラスターエンドポイントを指定していますが、DB名、マスターユーザー、マスターパスワードの情報は正しいと思います。同じ情報でコマンドラインでEC2経由でのRDS接続(MySQLモニタへのログイン)はできています。コマンドラインでログインした上で、Fuelのconfig > db.phpに設定しているDBが作成されていることは確認しています。 ちなみに、EC2にphpMyAdminをインストールして、RDS上のDBをphpMyAdminで見ようとしたのですが、「サーバーの IP アドレスが見つかりませんでした。」となり、phpMyAdminが見れない状態です。これももしかしたら同じ原因なのでしょうか。 ちなみに、EC2のウェブサーバーはNginxで、nginx.confではphpMyAdmin用のバーチャルホストをrootがphpMyAdminをおいたディレクトリで設定し、hostsファイルでEC2のIPアドレスを指定しています。
ssasaki

2018/11/28 01:56

うーん、コマンドラインでログインできる情報を設定してもNGということであれば、migration固有の問題ですね。 migration はあまり使わないのですが、エラーメッセージ的に考えられることとすれば、migration 実行で作成されるファイル、ディレクトリのパーミッションくらいでしょうか。 phpMyAdmin の方ですが、こちらはphpMyAdminがエラーになるという話ではなく、そもそもWebが見れない(nginxに接続できない)ということですか? それは FuelPHP とは関係なく、IP アドレス回りの設定がおかしいという話のような気がしますが。。
kkit

2018/11/28 04:19

ありがとうございます。 パーミッション系があやしそうですよね。AWSのVPCやサブネット、セキュリティグループの知識に少し怪しい所があるので、そのあたりが変な設定になってしまっているのかもしれません。 phpMyAdmin以外の部分は問題なくNginxに接続してFuelPHPの初期画面が表示されているので、phpMyAdminがAuroraにアクセスできないのが原因かな、と思ったのですが、コマンドラインでログインできるということは関係なさそうなのですかね。 phpMyAdminの方は色々設定いじっているうちにNginxの404画面になったり、名前解決ができない状態になったりします。Nginxの404画面になることがあるということは、少なくともNginxには接続できているはずだと思うのですが。もう少し試行錯誤してみたいと思います。ありがとうございます。
kkit

2018/12/07 01:41

本件、解決したので追記します。 まず、phpMyAdminが見れなかった原因は、/etc/php-fpm.d/www.confの記述漏れと、config.inc.phpにRDSのユーザー名、パスワードを追加していなかったことの2点でした。 [www.conf] ;listen.owner = nobody ;listen.group = nobody ;listen.mode = 0660 ↓ listen.owner = nginx listen.group = nginx listen.mode = 0660 とすることでphpMyAdminが見れるようになりました。 また、データベースコネクションが失敗してしまう原因は、RDSのセキュリティグループの設定でした。。 EC2からのデータベースコネクションは成功したので、ローカルからのコネクションだけ失敗してしまいおかしいな、と思っていたのですが、 MySQL/Auroraの3306ポートをマイPCのIPアドレスだけに解放することで無事データベースコネクションに成功しました。初歩的な設定ミスでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問