MySQL で root のパスワードを消す方法

MySQLのロゴイメージ。

MySQL で root のパスワードを削除したい場合があります。 例えば node.js と Express を使った開発などでは、標準では root のパスワードなしで接続するようになっていたりします。

ここでは特に Windows の MySQL で root パスワードを設定しない簡単な方法について解説します。 ただし、Windows 以外の環境で root パスワードが設定されている MySQL の root を消す場合にも同じ手順が使えます。

Windows であるかそれ以外であるかに関わらず、MySQL を既にインストールしている場合は、「インストーラを使う方法」の内容を参照してください。

アーカイブを使う方法

公式に zip 形式などのアーカイブ形式の MySQL が配布されています。

アーカイブを使って手動でインストールする方法では、任意の場所に MySQL を展開し、環境変数(システムパス)を設定し、 必要なら自動起動などの設定をする必要があります。

作業手順が多く非常に面倒ですが、コマンドラインからインストールや初期設定を実行するので、その際に root パスワードなしの状態にすることができます。

Win, Linux 向けなどの作業手順は MySQL 公式サイトにも公開されていますし、その他の有志の方もいくつか手順を公開しているので、必要なら参照しながらインストールを勧めることができます。

ただ残念なことに公式の資料を参照しながら設定しても、設定ミスなのか、環境依存の問題なのか、あるいは手順書のミスなのか上手く動作しない場合があります。

インストーラを使う方が無難に root なしの MySQL を用意することができると思います。

インストーラを使う方法

Windows 版の インストーラを使ったインストールでは、root パスワードの設定が必須となっています。したがって、インストール後に root のパスワードを削除する必要があります。

インストール後に MySQL を起動し、MySQL コマンドライン(Command Line) を起動します。MySQL のユーザデータのテーブルからユーザとパスワードを参照し、書き換えます。

まずは MySQL のデータベースに移動し、テーブルを一覧します。

mysql>use mysql;
mysql>show tables;

ユーザテーブルの内容を表示して登録(保存)されているデータを確認しましょう。

mysql>describe user;

バージョンや環境によって若干異なりますが、password カラムか、authentication_string が見つかると思います。 私の場合には authentication_string でした。ここにパスワードが保存されています。

~省略
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+

パスワードの保存先が見つかったので例えば次のようにしてパスワードを変更します。"任意のパスワード"の部分を空にすると、 root のパスワードを消すことができます。

mysql>update user set authentication_string=password('任意のパスワード') where user='root';

password カラムが見つからない

password カラムが存在しないにもかかわらず、検索して見つかった資料などを参考に、次のようにして password カラムを変更しようとすると、参照エラーが発生します。

mysql>update user set passowrd=password('任意のパスワード') where user='root';

Reference