0
0

More than 1 year has passed since last update.

EC2 Laravel9系 MySQL8系の組み合わせで初回マイグレーションできない問題の解決

Posted at

概要

  • EC2にPHP/Laravelの環境を構築し同じEC2内にMySQLをたてていざマイグレーションしようと思ったらできなかったので問題を解決してみる。

ご注意

  • 今回の作業は主に検証のために環境構築を行いました。本来Laravelでマイグレーションの行うことのできるMySQLユーザーはrootユーザーとは別に準備すべきです。(せめて当該DBのみselect updateが行える権限に絞るべき)

問題までの経緯

  1. EC2 AmazonLinux2インスタンス起動
  2. PHPインストール完了
  3. composerインストール完了
  4. Laravelインストーラーインストール完了
  5. MySQLインストール完了
  6. MySQLの起動とrootユーザーでのログインとDBの作成完了
  7. Apacheインストール完了
  8. Apacheのドキュメントルートに$ laravel new testを実行してlaravelのtestブロジェクトの作成完了
  9. http://EC2インスタンスのパブリックIPでLaravelのwelcome画面が表示される事を確認
  10. .envにMySQL系の情報を記載完了
  11. マイグレートコマンドを実行してマイグレーションを実行

問題

  • 下記のエラーが発生してマイグレーションが実行できない。
$ php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = test and table_name = migrations and table_type = 'BASE TABLE')

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:716
    712▕         // If an exception occurs when attempting to run a query, we'll format the error
    713▕         // message to include the bindings with SQL, which will make this exception a
    714▕         // lot more helpful to the developer instead of just the database's errors.
    715▕         catch (Exception $e) {
  ➜ 716▕             throw new QueryException(
    717▕                 $query, $this->prepareBindings($bindings), $e
    718▕             );
    719▕         }
    720▕     }

      +33 vendor frames 
  34  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

問題解決までの経緯

  1. .envに記載したMySQL系の情報(特にrootユーザーのユーザー名、パスワード)に誤りが無いか確認

    1. .envの情報をコピペーして$ mysqlコマンドでターミナルからログインすることはできたので問題なさそう。
  2. MySQL8系からデフォルトの認証方式が変更になった記憶があったので確認してみた。

    1. 下記のリンクに認証方式変更になった旨記載されていた。

      MySQL____MySQL_8_0_リファレンスマニュアル____6_4_1_2_SHA-2_プラガブル認証のキャッシュ.png

  3. 下記の方法でrootユーザーの認証プラグインを「mysql_native_password」に変更した。

  4. しかしこのままだと新しくMySQLのユーザーを追加した時に新しいの方の認証プラグイン「caching_sha2_password」で認証情報が登録されてしまう。

  5. 下記の方法で当該サーバーのMySQLのデフォルトの認証プラグインを「mysql_native_password」に変更しておく。

    1. MySQL8系 新規作成されるMySQLユーザーの認証プラグインをmysql_native_passwordに変更する
  6. 再びマイグレーションを実行したが、同様のエラーが出てマイグレーションをする事ができない。

  7. ダメ元でLaravelの設定のキャッシュをクリアして見る。

    $ php artisan config:cache
    
  8. 設定が反映されたのかマイグレーションできるようになった。

  9. おそらく、キャッシュのクリアだけではだめでMySQLの設定変更 → キャッシュクリア → マイグレーションの流れで解決できたものと思われる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0