MySQL 5.7 で sudo 無し root ログイン [Ubuntu]

MySQL 5.7 で sudo 無しで mysql クライアントを root ユーザに接続する方法について。ついでにインストール直後に root のパスワードを設定する方法についても書いておく。

[はじめに]

MySQL 5.7 では、インストール直後の root ユーザは管理者権限でないとログインできない。すなわち、下記のように sudo が必要となる。(RedHat 系なら su - する)

$ sudo mysql -u root -p

本番サーバでは一般ユーザが DB の root にアクセスできるのは好ましくないので、この動作は理にかなっている。root はサーバ管理者のみが扱うことにして、別途 DB 操作用のユーザ (devuser 等) を作成するのが良い。

ただし、開発 PC 上では、ローカルでの使用を前提として、root 接続するよう環境を設定してあることもある。既存のプロジェクトがたくさんあったりすると、いちいち新しいユーザで接続するようにパラメータを変えるのも面倒なので、一般ユーザのまま root で接続できると便利。

[方法]

sudo 無しで root 接続 (ローカルに限定すべき) するには下記のようにする。

1.  一旦 sudo で root にログインする。
 ※ パスワード不明でログインできない場合は、下記[root の初期パスワードが不明な場合]参照

$ sudo mysql -u root -p 

2. root の認証方法を変更する。
 ※ 下記 {PW} は、root パスワードで置き換える事

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '{PW}';
mysql> FLUSH PRIVILEGES;

※念のため、別のターミナルを開いて sudo 無しでログインできるか確認してから exit; すること。

これで、sudo 無しで mysql クライアントを接続できる。

$ mysql -u root -p


[おまけ: root の初期パスワードが不明な場合]

MySQL 5.7 では、インストール時にパスワードを聞いてこない。初回の root ログインでは下記いずれかを行う。

1. mysql_secure_installation を実行する。(こちらが本来のやり方)

$ sudo mysql_secure_installation 

上記を実行して質問に答えて行けば良く、基本的にはすべて Yes で良いと思うが、最初の VALIDATE PASSWORD plugin だけは、パスワードの文字制限が不要なら No としておく。(後からはずす方法は未調査)

2. skip-grant-tables を設定する。
/etc/mysql/my.cnf の [mysqld] セクションに skip-grant-tables を指定するとパスワード無しでログインできる。

[mysqld]
skip-grant-tables

上記設定をしてからサーバ再起動

$ sudo server mysql restart

ログインはパスワード無しで

$ mysql -u root

[参考]

MYSQL 5.7 ROOT LOGIN WITHOUT SUDO


Note やるからには、サポートがいただけるような役立つ記事を書きたいものです。サポートは資料購入に宛てます。