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

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

はじめに

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/

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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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