Help us understand the problem. What is going on with this article?

HerokuからAWSに本番環境を移行する際に詰まったこと。

More than 1 year has passed since last update.

はじめに

MAMP環境で作成したLaravelプロジェクトをHerokuにデプロイしてたのですがAWSの学習をかねて本番環境を移行してみました。

環境

  • 開発環境
    • PHP 7.3.6
    • Laravel 5.8.35
    • MAMP
  • 本番環境
    • Heroku
  • 移行する本番環境
    • AWS
      • EC2(Amazon Linux 2 AMI)
      • RDS(MySQL)

詰まった点

EC2にプロジェクトをgit cloneしブラウザでプロジェクトが開ける状態が出来、RDSのMySQLに

php artisan migrate

コマンドでテーブルを作成できたら完成!、、というところでエラー発生

Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema =  and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/html/namilog/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[HY000] [2002] No such file or directory")
      /var/www/html/<app名>/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=", "<db名>", "<パスワード>", [])
      /var/www/html/<app名>/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

エラーの詳細をみてみるとException traceの2にMAMPで開発を行なった際のunix_socketが指定されている。

 PDO::__construct("mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=", "<db名>", "<パスワード>", [])
      /var/www/html/<app名>/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

調べてみると、unix_socketはlocalhost内で通信を行う際に必要なものらしくて、今回はEC2のIPアドレスで通信を行うので必要ないことがわかりました。
なのでlaravelプロジェクトのconfig/database.phpファイル内のunix_socketのパスを削除。

database.php
~省略~
'mysql' => [
           ~省略~
          'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
           ~省略~
]
~省略~

その後改めてphp artisan migrate を実行するとうまくテーブルが作成されました。

間違って解釈している可能性があるので異なっている点がありましたら指摘してくださるとありがたいです。

参考にした記事

https://beyondjapan.com/blog/2016/03/2002-mysql-socket-error/

takumines
PHP、Laravelを使用しています。 エンジニア1年目
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away