Ubuntu18.04にMySQLをインストールする手順

公開日:2019/05/27 更新日:2019/05/27
Ubuntu18.04にMySQLをインストールする手順のサムネイル

はじめに

UbuntuにMySQLサーバをインストールする機会が何かと多く、MySQL5.7以降で少々設定が変わっていたのでインストールと設定手順をまとめます。

前提と環境

以下の通りです。

  • OS : Ubuntu18.04
  • MySQL : 5.7

参考サイト様

以降の手順は、以下の記事を大変参考にさせて頂きました。Digital Oceanの記事はどれも大変わかり易く助かります。

www.digitalocean.com

MySQL is an open-source database management system, commonly installed as part of the popular LAMP (Linux, Apache, MySQL, PHP/Python/Perl) stack. It uses a relational database and SQL (Structured Query Language) to manage its data.

必要なパッケージをインストールする

以下のコマンドを順番に実行し完了です。

$ sudo apt update
$ sudo apt install mysql-server

MySQLサーバのセキュリティ設定を行う

MySQLサーバのセキュリティ関連の設定を行うためにmysql_secure_installtionというツールが用意されているのでこれを実行します。

$ sudo mysql_secure_installation

上記を実行すると、質問形式でいくつかのセキュリティ設定がはじまります。はじめに以下のようにパスワードバリデーション用のプラグインを使用するか確認されます。パスワードバリデーションというのは、MySQL用のユーザのパスワード強度をチェックし、十分セキュアなパスワードのみ受け付けるよう制限をかけることができます。例えば、最低何文字以上で必ず記号と数値を1文字以上含むなどです。この条件について次の質問で設定できます。 良ければyを入力してEnterを押します。

$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:y

上記の質問でyにした場合は続いてパスワードバリデーションのレベルを聞かれます。LOW、MEDIUM、STRONGの3つのレベルがあり、ここではMEDIUMを選択するため1を入力してEnterを押します。

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:1

なお、各レベルの内容は以下のようになっています。

LOW 最低8文字以上
MEDIUM 最低8文字以上で数値、大文字小文字、特殊記号を必ず含む
STRONG 最低8文字以上で数値、大文字小文字、特殊記号を必ず含み、さらに4文字以上の文字列は辞書ファイルに登録されている単語に一致してはならないという制限あり
LOWを選択する場合は0を入力しEnterを押します。MEDIUM、STRONGはそれぞれ12を入力してEnterを押します。

続いて、実際にレベルを満たすパスワードを2回入力します。これはrootユーザ用のパスワードです。

Please set the password for root here.

New password:

Re-enter new password:

パスワードを2回入力すると、0〜100のスコアが入力したパスワードに対して付けられて、これで良いか確認されます。セキュリティレベルが高いほど高いスコアになります。 以下の場合は50点のスコアが付けられています。OKな場合はyを入力してEnterを押します。

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :y

なお、今後MySQL用のユーザを作成する際に設定するパスワードは、ここで設定したセキュリティレベルを満たす必要がありますので注意してください。 また、大変紛らわしいですが、ここで入力したrootユーザ用のパスワードは実際にMySQLサーバにログインする際に使用できず、設定変更を行う必要があります。これについては後述します。

続いてMySQLがデフォルトで設定するテスト用の匿名ユーザを削除するか確認されます。良ければyを入力してEnterを押します。

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :y

リモートからのrootログインを禁止するか確認されます。ここではyと入力してEnterを押します。

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :y

通常MySQLがデフォルトで作成する「test」というどのユーザもアクセス可能なデータベースを削除するかの確認です。yと入力してEnterを押します。

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) :y

これまで行った設定を反映させるためにリロードして良いかの確認です。yと入力してEnterを押します。

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :y

最後にここまでで設定した内容が表示され、以下のようにAll done!と表示されればセキュリティ設定は完了です。

 (...以上省略...)

- Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

MySQLにパスワードでログインできるように設定変更する

上記の設定でパスワードを設定しましたが、これはこのままでは使用されません。というのもMySQL 5.7以降では、MySQLのrootユーザはデフォルトではそもそもパスワードによるログインができないようになっています。パスワードの代わりに、システムのrootユーザ(ここではOSがUbuntuなのでUbuntuのrootユーザ)情報でログインする必要があります。すなわち、以下のようにsudoでMySQLのrootユーザとしてもMySQLにログインできます。

$ sudo mysql

これはMySQL 5.7以降でauth_socketというプラグインが使用されているためです。もし、従来と同様にMySQLのrootユーザ用にパスワードを設定し、そのパスワードでMySQLにログインしたい場合はauth_socketの代わりにmysql_native_passwordというプラグインを使用するよう変更する必要があります。この作業はとても簡単です。

具体的には、sudo mysqlでMySQLにログインした後、以下のコマンドを実行します。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

私の環境では以下のように表示されました。そしてrootユーザのpluginという部分がauth_socketになっていることが確認できます。

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *5F6EC674A843A2EDC44C4B6BCBD832ADC88AF8BB | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+

これを従来のパスワード認証に変更したい場合は以下のコマンドを実行します。yourpasswordは実際に使用したいパスワードを入力してください。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';

後はこの変更を以下で反映させます。

mysql> FLUSH PRIVILEGES;

上記を実行した後でもう一度rootユーザのpluginを確認してみると、以下のようにauth_socketからmysql_native_passwordに変更されていることを確認できます。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *C3ADED57B54F554C2B4481785FA8610BE4BDF871 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *5F6EC674A843A2EDC44C4B6BCBD832ADC88AF8BB | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

以上で完了です。なお、今後はMySQLにrootユーザでログインしたい場合は、以下のコマンドになります。

$ mysql -u root -p

まとめ

MySQL5.7から少々設定方法が変わっていた部分があったのでメモしておきます。何かと設定を行う機会が多いです。

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。