MySQL for Windowsを.zipからインストールし、ルートパスワードをリセットします


8

私は自分のPC(Windows 8.1 x64)にMySQLサーバーのみを置き、Workbenchなどをインストールしたくありませんでした。だから私.zipdev.mysql.com/downloadsからアーカイブをダウンロードしました。x86_64バージョン5.7.9(MySQL Community Server(GPL))上のWin64のダウンロードです。

Windowsサービスとしてインストールしましたが、mysqlデータベースはなく、のみでしたinformation_schema。だから私はこれを実行しました:

mysql_upgrade.exe --upgrade-system-tables

そして、mysqlデータベースが作成されました。しかし、それと同時に、ルートユーザーに何かが起こりましたmysql。もうアクセスできなくなったからです。

そこで、突然現れたこのパスワードをリセットすることにしました(その前にパスワードを持っていなかったためです)。私は公式マニュアルに次の解決策を見つけました、私はこのようにサーバーを起動しました:

mysqld.exe --skip-grant-tables --console

次に、mysqlパスワードなしで開きました:

mysql.exe u root

そして、ルートパスワードをリセットしようとしました:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');

しかし、私はこのエラーを受け取りました:

エラー1131(42000):MySQLを匿名ユーザーとして使用しており、匿名ユーザーはパスワードを変更できません。

これは何ですか?どのように私は匿名ですか?すべてのコマンドはcmd.exeアドミニストレーターの下で実行されました。

この状況でrootパスワードをリセットするにはどうすればよいですか?

更新1:現在のユーザーを確認しようとしました:

SELECT USER(), CURRENT_USER();

それは与える:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@  | @              |
+--------+----------------+

のように始めたので、それは奇妙mysql.exe -u rootです。

次に、ユーザーテーブルを確認しました。

SELECT user FROM mysql.user;

それは与える:

+-----------+
| user      |
+-----------+
| mysql.sys |
+-----------+

それはさらに奇妙です。また、パスワードフィールドはありません。

SELECT user, password FROM mysql.user;

エラー1054(42S22):「フィールドリスト」の列「パスワード」が不明です

そのため、パスワードを変更できません。

そして、私は新しいユーザーを作成できません:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';

エラー1290(HY000):MySQLサーバーは--skip-grant-tablesオプションで実行されているため、このステートメントを実行できません

今、私は迷っています。

更新2:おそらく、最初からすべてのことを間違っていました。どうやら、mysqld.exe --initializeどういうわけかコマンドを逃した。

したがって、これは@RolandoMySQLDBAのおかげで、.zip-archiveからMySQLをインストールする方法です

  1. アーカイブを解凍し、準備しmy.iniます。
  2. 実行mysqld.exe --initializeし、.errファイルから一時パスワードを取得します。
  3. MySQLをサービスとしてインストールして実行する

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. mysql -u root -p仮パスワードで接続してください。

  5. 一時パスワードを変更します。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';

回答:


6

あなたが開始して以来mysqld--skip-助成金・テーブルには、任意の標準実行できないGRANTREVOKE、またはSETパスワードコマンドを。それにもかかわらず、root@localhost次のようにパスワードを変更できます。

UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';

次に、mysqldを再起動すると、ビジネスに戻ります。

あなたが匿名であることに関して、あなたが今ログインして実行すると

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

HowYouWereAllowedToLoginは空白のユーザー名といくつかのホストがあることに注意してください。

試してみる !!!

UPDATE 2015-11-17 16:24 EST

として知られpasswordているカラムmysql.userは、MySQL 5.7には存在しません。

改名authentication_string

適切なアプローチ

あなたがしなければならないことは実行されます

mysqld --initialize

これにより、データフォルダが作成されます。

root @ localhostには、次の日時と文字列で始まるエラーファイルに表示される一時的なパスワードが割り当てられました

2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:

それでログインして実行することができます ALTER USER

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

SET PASSWORDの MySQL 5.7ドキュメントを参照してください


返信ありがとうございます。はい、そのような制限を認識しています。しかし、これらはMySQLのマニュアルからのステップです。そして、私はあなたの指示に従おうとしました、私の編集された質問を見てください。
-retif

mysql.userにパスワード列はもうないため、このメソッドは二度と機能しません。ただし、現在、他のメソッド(--skip-grant-tablesおよび--init-fileを使用)も壊れているため、5.7.9 atmではパスワードをリセットできません。
Mike Lischke 2015年

@MikeLischkeありがとうございます。この回答を削除する必要があります
RolandoMySQLDBA '17 / 11/17

@MikeLischke password列の名前が変更されたことに気づきましたauthentication_string
RolandoMySQLDBA 2015年

まあ、実際にユーザーテーブルを直接変更することは過去のものであり、なくなるでしょうが、標準のコマンド(alter userなど)を使用しても機能しません。現在、許可されていない匿名ユーザーと見なされているため、拒否されています。これらのコマンドを発行するには(--skip-grant-tablesまたは--init-fileでサーバーを起動した場合)。ただし、-initializeオプションは、ルートパスワードをリセットする正しい方法です。
Mike Lischke、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.