20200722のMySQLに関する記事は3件です。

SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES)の対処

自作したログイン機能でログインしようとした時に"SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)"が出てきたのでメモ代わりに投稿します。

前提:権限を付与するとエラーが出る

 grant all privileges on database_name.* to 'root'@'localhost';

"ERROR 1034 (HY000): Index for table 'db' is corrupt; try to repair it"というエラーが出ました。

①テーブルを修復

repair table user;

という調子でデータベース内のテーブル全てを修復します。

②もう一度権限を付与

 grant all privileges on database_name.* to 'root'@'localhost';

これで私の場合はうまくいきました。どなたかのお役に立てると幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

仮想環境でLaravelのmigrateができない場合の解決方法

php artisan migrateが実行できない場合の解決方法

環境

MAC
Homebrew  2.4.8
MySQL     Ver 8.0.21 for osx10.15 on x86_64 (Homebrew)
PHP     7.3.11 (cli) (built: Jul 5 2020 03:23:39) ( NTS )

原因

configのキャッシュが残っている
MySQLのversionが8.0以降の場合、envファイルへの追記が必要。

解決方法

下記コマンドでconfigのキャッシュを消去後、再度migrate実行

php artisan config:clear

別のエラーが出ている場合 エラーコード

 Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = laravel-course and table_name = migrations and table_type = 'BASE TABLE')

  at /Applications/MAMP/htdocs/laravel-course/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 'root'@'localhost' (using password: YES)")
      /Applications/MAMP/htdocs/laravel-course/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel-course", "root", "root", [])
      /Applications/MAMP/htdocs/laravel-course/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details. 

エラー解決方法

1 MySQLに'データベース'を作成
2 作業用ユーザーの作成
3 env .database.phpの情報を合わせる

.envの情報を以下にする
DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE='データベース'
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

4 
php artisan config:clear

php artisan migrate
で完了

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【超初心者用】【MySQL 】ERROR 1044 (42000)とERROR 1064 (42000)

ERROR 1044 (42000)必要な権限がないエラー

ERROR 1044 (42000): Access denied for user 'user'@'localhost' to database 'dotinstall_db'

ちゃんと教材通りに書いたのに・・・

ERROR 1064 (42000)構文エラー

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'test'' at line 1

ちゃんと教材通りに書いたのに・・・
バージョンによって構文が変わるの?と思って調べて行きました。

結局ERROR 1064 (42000)をそのまんまググりつつ、ユーザの追加についてMySQL 5.6 リファレンスマニュアルがヒットするのでそれを参照

https://dev.mysql.com/doc/refman/5.6/ja/

ドットインストールの通りにやったのに・・・

mysqlの使い方をドットインストールで勉強していましたがうまく行きませんでした。

バージョンの確認

自分のバージョン

// phpのバージョン確認
$ php -v 
PHP 7.4.8
// mysqlのバージョン確認
$ mysql --version
mysql Ver 8.0.19 for osx10.15 on x86_64 (Homebrew)

ドットインストールのバージョン

PHP 5.6.11
mysql 14.14 Distrib 5.5.44, for Linux (x86_64) using readline 5.1

ERROR 1064 (42000)は構文エラー

mysqlのバージョンがドットインストールのバージョンと違うことによるのか、ドットインストールのコマンドを使っても発生していた。

  1. ユーザの追加

ドットインストールでは

mysql> grant all on dotinstall_db.* to username@localhost identified by password

自分のバージョンでは

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
(これだけじゃ足りなて、次の権限の付与が別で必要)

allall privilegesかの違いがあるよう。
また、with grant optionというのも必要らしい。

https://www.postgresql.jp/document/8.0/html/sql-grant.html
これによると

WITH GRANT OPTIONが指定されると、権限受領者はその後、他のユーザにその権限を与えることができます。 グラントオプションがないと、受領者はこれを行うことができません。 現時点では、グラントオプションは個々のユーザに対してのみ与えることができ、グループやPUBLICには与えることができません。

ということらしい。
とりあえず書いといた方が良いということかしら。

  1. 権限の付与
mysql> grant all privileges on dotinstall_db.* to 'username'@'localhost'
    -> with grant option;

上記二つ、つまり

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on dotinstall_db.* to 'dbuser'@'localhost'
    -> with grant option;

これらを実行することで、

$ mysql -u username -p

を実行してパスワードを入力すると入れました。

感想

ほんと一つずつうまく行かなくて全然進まない。
なんか他の環境を使えばもっと楽になるらしいですが、しっかり理解したいので、ローカル環境を使おうと思っているけど、

  1. バージョンごとの違い
  2. ディレクトリの違い

などでとにかくつまづく。でもその辺りの違いをしっかり理解していなければ、状況ごとに柔軟に対処できなくなると思うので、なんとか解決しながら進みたい!と決意。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む