どうも、ウェブ系ウシジマくんです。
ローカルのMySQLでrootユーザーのパスワードって、うっかりしていると忘れてしまいがちですよね。
この記事では、そんな万が一に備えて、パスワードを変更する方法を紹介します。
まずはMySQLにログインする
ターミナルで次のコマンドを叩き、MySQLにログインします。
mysql -u root
MySQLにログインできたら、現在のデータベースを確認してみましょう。
show databases;
初期状態だと、次のようなデータベースが表示されるはずです。
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
ローカルのユーザー情報を管理しているのはmysql
というデータベースなので、
use mysql;
上記のように入力して、使用するデータベースを指定します。
これで準備ができました。
mysqlデータベース内のテーブルを確認する
データベースをmysql
に指定したら、 次に、テーブルを確認します。
show tables;
このコマンドを叩くと、mysql
というデータベース内にあるテーブルが一覧で表示されます。
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
一番下にuser
というテーブルがありますよね。
ここのテーブルにrootユーザーのパスワードが格納されているので、これに対してパスワード変更SQLを発行することになります。
userテーブルに格納されているrootユーザーのパスワードを変更する
次のSQLを叩いて、カラムを確認してみてください。
show columns from user \G
そうすると、userテーブル内のカラムを縦型に表示してくれます。
その中に、authentication_string
というカラムがありますので、それをパスワード変更に使います。
なお、余談ですが、\G
コマンドはクエリ結果を縦表示に整形してくれるメタコマンドです。
ただし、その際にshow columns from user \G;
のように\G
のあとにセミコロンをつけると、
表示はされますがERROR: No query specified
のようにエラーがでますので、注意しましょう。
パスワードを変更するクエリを発行する
パスワードを変更する際に対象となるカラムがauthentication_string
とわかったので、次のクエリを発行してパスワードを変更します。
update user set authentication_string=password("変更したいパスワード") where User='root';
クエリの内容としては、
- UPDATE構文で引数に指定したテーブルの内容を更新する(今回はuser)
- setオプションでカラム名と更新する値を指定する(今回はカラム名がauthentication_stringで値がpassword("変更したいパスワード")になる)
- where構文でどのレコードに対する更新するかを指定(今回はuserがrootが対象)
というような内容となります。
以前(MySQL5.6)ではpassword
というカラムでしたが、5.7でauthentication_string
に変更されたようなので、バージョンが5.7以降の方は要注意です。
参考リンク
Query OK
がでれば、無事にパスワードが変更されたので、
flush privileges;
として権限変更を有効化します。
なお、これ以降はmysql -u root
のようにパスワード指定なしてログインしようとしてもエラーになります。
これでログインできれば大丈夫です、お疲れ様でした!