前提・実現したいこと
Laravelのmigrationファイルをmysqlにmigrate出来る様にしたいです。
発生している問題・エラーメッセージ
php artisan migrate Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'dbuser'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = link and table_name = migrations and table_type = 'BASE TABLE') at /home/ubuntu/environment/link/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669 665| // If an exception occurs when attempting to run a query, we'll format the error 666| // message to include the bindings with SQL, which will make this exception a 667| // lot more helpful to the developer instead of just the database's errors. 668| catch (Exception $e) { > 669| throw new QueryException( 670| $query, $this->prepareBindings($bindings), $e 671| ); 672| } 673| Exception trace: 1 PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'dbuser'@'localhost' (using password: YES)") /home/ubuntu/environment/link/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=link", "dbuser", "dbpass", []) /home/ubuntu/environment/link/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.
該当のソースコード
データベースの接続はできています。 ubuntu:~/environment/link $ php artisan tinker Psy Shell v0.10.4 (PHP 7.3.24-3+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman >>> DB::connection(); => Illuminate\Database\MySqlConnection {#3194}
試したこと
ネットで調べ.envやconfig/databaseのDB_DATABASE,DB_USERNAME,DB_PASSWORDをいじったのですがエラーのままです。
補足情報(FW/ツールのバージョンなど)
cloud 9
laravel 6.0
php 7.3
エラーメッセージを見ると、
・データベース名は link
・ユーザ名は dbuser
・パスワードは dbpass
で接続しようとしていますが、
これらの値は、意図通りなのでしょうか?
それとも、別の値を設定しているつもりなのに、上記のようになってしまう、ということですか?
それと、
tinkerで、DB::connection()しただけでは、接続できたとは言え無さそうです。DB::select('SELECT 1'); とやってみて、エラーが出なければ接続に成功してると思います。
また、.envを修正しながら、tinkerで試行錯誤する場合は、.envを修正するたびに、tinkerを再起動した方が良さそうですよ(そうしないと、.envの修正が反映されない)。
ご回答頂きありがとうございます。
データベース名、ユーザー名、パスワード名は意図した通りです。
ご指摘頂いたtinkerで DB::select('SELECT 1')を試したところ
Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [1045] Access denied for user 'dbuser'@'localhost' (using password: YES) (SQL: SELECT 1)'
と赤背景で返されてしまいました。
なるほど〜
では、ターミナルで
mysql -u dbuser -p
と打ってみてください。
パスワードを聞かれるので、dbpass と入れます。
エラーが出なければ、MySQLのシェルが使えるようになるはずです。
次に
SHOW DATABASES;
と打ってみてください。
データベースの一覧が表示されます。
link はあるでしょうか?
無ければ、作りましょう。
CREATE DATABASE link;
既にある場合は、
SHOW GRANTS FOR `dbuser`@`localhost`;
と打ってみて、表示された内容を教えて頂けますか?
※もし、MySQLのシェルが開けなかった場合は、(MySQLの)rootのパスワードが必要になると思います。
確認しましたところエラーとなってしまいました。
mysql -u dbuser -p
Enter password:
ERROR 1045 (28000): Access denied for user 'dbuser'@'localhost' (using password: YES)
私の勉強不足で申し訳ないのですが、rootのパスワードについて調べてもよくわかりません。
cloud9のMySQLは、パスワード無しかもしれません。すみません、cloud9のこと、よく知らないんです。
ためしに、
mysql -u root
で入れるかどうか、ご確認ください。
ダメなら、
mysql -u root -p
として、パスワードを聞かれたら、Enterキーで行けるかも。
もし成功したら、
SELECT user, host FROM mysql.user;
で、dbuserというユーザが存在するかどうか、確認できると思います。
返信が遅くなってしまい申し訳ございません。
mysql -u rootとmysql -u root -pは2つともエラーで弾かれてしまったので、sudo mysql -u rootで入りました。ご指摘を頂いたSELECT user, host FROM mysql.user;を試したところ、
user | host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
という結果でした。
sudoが必要でしたか。気づいていただいて良かったです。
この結果から、dbuserというユーザが存在しないことが分かりますね。
ユーザの作り方は、ググったら見つかると思いますので、やってみてください。
(1)ユーザdbuserを作る
(2)dbuserに、データベースを作成する権限など、必要な権限を与える(面倒くさいなら、全権を与える)
(3)一旦ログアウトし、dbuserでログインしてからデータベースlinkを作る
これでMigrationできるはず、だと思います。
無事、Migrationできました。
ありがとうございました。
お疲れさまでした~
あなたの回答
tips
プレビュー