【転載】MySQLパスワードを正しくリセット

1624 ワード

誰も家の鍵をなくしたくないが、どんなに気をつけても、時間が長くなると、このようなことは何度も起こる.MySQLのパスワードも同じで、それをドキュメントに書くのは安全ではありません.頭の中で覚えておくと忘れられません.MySQLのパスワードを忘れた場合、どのようにリセットしますか?まずMySQLサービスを停止し、skip-grant-tablesパラメータを使用して起動します.
shell> /etc/init.d/mysql stop
shell> mysqld_safe --skip-grant-tables &

認証なしでMySQLコマンドラインにアクセスし、SQLを使用してMySQLパスワードをリセットします.
UPDATE mysql.user SET Password=PASSWORD('...') WHERE User='...' AND Host= '...';
FLUSH PRIVILEGES;

なぜそれが間違った答えだと言ったのですか?skip-grant-tablesパラメータを単純に使用してサービスを開始した後、データベースサーバが外部ネットワークアクセスを遮断しない限り、自分以外にも心を込めた人がデータベースにアクセスする可能性があるため、パスワードをリセットするのにかかる時間は短いが、泥棒を恐れないで泥棒が心配しているのではないかと言われ、どんな漏れも大きな災いになる可能性がある.
次は正解です.
キーは、skip-grant-tablesパラメータとともにskip-networkingパラメータを追加することです.
shell> mysqld_safe --skip-grant-tables --skip-networking &

次にSQLを使用してパスワードをリセットした後、skip-networkingを削除し、通常の方法でMySQLサービスを再起動してください.
shell> /etc/init.d/mysqld restart

上記の方法は2回のサービスを再起動する必要がありますが、実際にはもっと優雅で、1回再起動すればいいです.まず、使用したSQL文をテキストファイルに保存する必要があります(/path/to/init/file):
UPDATE mysql.user SET Password=PASSWORD('...') WHERE User='...' AND Host= '...';
FLUSH PRIVILEGES;

次にinit-fileパラメータを使用してMySQLサービスを起動し、
shell> /etc/init.d/mysql stop
shell> mysqld_safe --init-file=/path/to/init/file &

このとき、パスワードはリセットされ、パスワードが漏れないようにファイルの内容を削除することを忘れないでください.ヒント:本明細書で使用するパラメータは、コマンドラインmysqld_を使用します.safeが伝えるのは、実はmy.cnf. 参考:パスワードのリセットについては、公式ドキュメントには、How to Reset the Root Passwordという専門的な説明があります.