web-dev-qa-db-ja.com

MySQL:rootアカウントにアクセスできません

ローカルWindowsボックスでMySQL 5.xを実行していますが、MySQL管理者を使用して、ルートアカウントを使用して作成したデータベースに接続できません。私が得るエラーは:

MySQLエラー番号1045ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)

Rootアカウントの資格情報の変更を思い出せませんが、IPを追加して、LAN上の他のコンピューターにdbへのアクセスを許可しようとしたことはわかっています。 IPの1つに対して私がしたことの1つは、アカウントへのアクセスを指定することでした'root'の代わりにroot、つまり、ルートを単一引用符で囲みました。 MySQL管理者を使用してすべて。これがルートを使用してログインできない理由ですか?

また、新しいルートアカウントを作成したり、rootアカウントをリセットしたりする方法はありますか?前述のとおり、私は自分のボックスに完全にアクセスできます。

これらの質問を参照してください

17
NogFather

Initファイルを使用できます。 MySQLの公式ドキュメントで ルートパスワードをリセットする方法 を確認してください(代替ソリューションのコメントを含む)。

したがって、基本的にはinitファイルを使用して、アクセスを修正するために必要なSQLクエリ(GRANDCREATEFLUSH PRIVILEGESなど)をinitファイル(任意のファイル)。

これがrootアカウントを回復する私の例です:

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

ファイルを作成したら、次のコマンドを実行できます。

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

次に、これが機能したかどうかを確認するには、 Ctrl+Z bgと入力してプロセスをフォアグラウンドからバックグラウンドに実行し、次の方法でアクセスを確認します。

mysql -u root -proot
mysql> show grants;
+-------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' |

以下も参照してください。

19
kenorb

これは私のために働きました:

https://blog.dotkam.com/2007/04/10/mysql-reset-lost-root-password/

ステップ1:MySQLデーモンが現在実行されている場合は停止する

  ps -ef | grep mysql      - checks if mysql/mysqld is one of the running processes.

  pkill mysqld             - kills the daemon, if it is running.

ステップ2:許可テーブルをスキップしてMySQL安全デーモンを実行する

  mysqld_safe --skip-grant-tables &

  mysql -u root mysql

ステップ3:パスワードなしでrootとしてMySQLにログインする

  mysql -u root mysql

ステップ4:UPDATEクエリを実行してrootパスワードをリセットする

  UPDATE user SET password=PASSWORD("value=42") WHERE user="root";
  FLUSH PRIVILEGES;

MySQL 5.7では、「パスワード」フィールドが削除され、フィールド名は「authentication_string」になりました。

  UPDATE user SET authentication_string=PASSWORD("42") WHERE 
  user="root";
  FLUSH PRIVILEGES;

ステップ5:MySQLセーフデーモンを停止する

ステップ6:MySQLデーモンを起動する

5

Rootでmysqlにアクセスすると、同じ問題が発生しました。私が見つけた問題は、一部のデータベースファイルがmysqlサーバーデーモンを起動したユーザーであるmysqlユーザーによる権限を持たないことです。

これをls -l /var/lib/mysqlコマンドで確認できます。mysqlユーザーが一部のファイルまたはディレクトリの読み取りまたは書き込みの権限を持っていない場合、問題が発生する可能性があります。 chown/chmodコマンドを使用して、これらのファイルまたはディレクトリの所有者またはモードを変更できます。

これらの変更後、mysqldデーモンを再起動し、コマンドを使用してrootでログインします。

mysql -u root

次に、パスワードを変更するか、mysqlにログインするための他のユーザーを作成します。

HTH

1
Shumin Guo

MySQLマニュアルには、問題を解決する rootパスワードをリセットする方法 に関するセクションがあります。

1
Dave Webb