開発者ドキュメント

Ubuntu20.04にMySQLをインストールする方法

序章

MySQL はオープンソースのデータベース管理システムであり、一般的に人気のある LAMP (Linux、Apache、MySQL、PHP / Python / Perl)スタックの一部としてインストールされます。 リレーショナルモデルを実装し、構造化クエリ言語(SQLとしてよく知られています)を使用してデータを管理します。

このチュートリアルでは、MySQLバージョン8.0をUbuntu20.04サーバーにインストールする方法について説明します。 これを完了すると、次のWebサイトまたはアプリケーションの構築に使用できる実用的なリレーショナルデータベースができあがります。

前提条件

このチュートリアルに従うには、次のものが必要です。

このページに埋め込まれているインタラクティブ端末を使用して、このチュートリアルでMySQLのインストールと構成を試すこともできます。 次のLaunch an Interactive Terminal!ボタンをクリックして開始します。

ステップ1—MySQLをインストールする

Ubuntu 20.04では、APTパッケージリポジトリを使用してMySQLをインストールできます。 この記事の執筆時点で、デフォルトのUbuntuリポジトリで利用可能なMySQLのバージョンはバージョン8.0.27です。

最近インストールしていない場合は、サーバーのパッケージインデックスを更新します。

  1. sudo apt update

次に、mysql-serverパッケージをインストールします。

  1. sudo apt install mysql-server

systemctl startコマンドを使用して、サーバーが実行されていることを確認します。

  1. sudo systemctl start mysql.service

これらのコマンドはMySQLをインストールして起動しますが、パスワードの設定やその他の構成変更を求めるプロンプトは表示されません。 これによりMySQLのインストールが安全でなくなるため、次にこれに対処します。

ステップ2—MySQLの構成

MySQLを新規インストールする場合は、DBMSに含まれているセキュリティスクリプトを実行する必要があります。 このスクリプトは、リモートルートログインやサンプルユーザーなどの安全性の低いデフォルトオプションの一部を変更します。

sudoを使用してセキュリティスクリプトを実行します。

  1. sudo mysql_secure_installation

これにより、MySQLインストールのセキュリティオプションにいくつかの変更を加えることができる一連のプロンプトが表示されます。 最初のプロンプトでは、Validate Password Pluginを設定するかどうかを尋ねられます。このプラグインを使用して、新しいMySQLユーザーのパスワード強度を有効と見なす前にテストできます。

パスワードの検証プラグインを設定することを選択した場合、パスワードで認証するMySQLユーザーは、選択したポリシーを満たすパスワードを持っている必要があります。 2と入力して選択できる最強のポリシーレベルでは、パスワードの長さが8文字以上で、大文字、小文字、数字、特殊文字が混在している必要があります。

Output
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT 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 component? Press y|Y for Yes, any other key for No: Y 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: 2

Validate Password Pluginの設定を選択したかどうかに関係なく、次のプロンプトはMySQL rootユーザーのパスワードを設定することです。 選択した安全なパスワードを入力して確認します。

Output
Please set the password for root here. New password: Re-enter new password:

root MySQLユーザーのパスワードを設定した場合でも、このユーザーは現在、MySQLシェルに接続するときにパスワードで認証するように構成されていないことに注意してください。

Validate Password Pluginを使用した場合は、新しいパスワードの強度に関するフィードバックを受け取ります。 次に、スクリプトは、入力したばかりのパスワードを続行するか、新しいパスワードを入力するかを尋ねます。 入力したパスワードの強度に満足している場合は、Yと入力してスクリプトを続行します。

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

そこから、Y、次にENTERを押して、後続のすべての質問のデフォルトを受け入れることができます。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールが読み込まれるため、MySQLは行った変更をすぐに尊重します。

スクリプトが完了すると、MySQLのインストールが保護されます。 これで、MySQLクライアントを使用した専用データベースユーザーの作成に進むことができます。

ステップ3—専用のMySQLユーザーを作成して特権を付与する

インストール時に、MySQLはデータベースの管理に使用できるrootユーザーアカウントを作成します。 このユーザーは、MySQLサーバーに対する完全な特権を持っています。つまり、すべてのデータベース、テーブル、ユーザーなどを完全に制御できます。 このため、管理機能以外でこのアカウントを使用することは避けてください。 このステップでは、 root MySQLユーザーを使用して新しいユーザーアカウントを作成し、それに特権を付与する方法の概要を説明します。

MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、 root MySQLユーザーは、パスワードではなくデフォルトでauth_socketプラグインを使用して認証するように設定されています。 このプラグインでは、MySQLクライアントを呼び出すオペレーティングシステムユーザーの名前がコマンドで指定されたMySQLユーザーの名前と一致する必要があるため、sudo権限でmysqlを呼び出す必要があります。 root MySQLユーザー:

  1. sudo mysql

注:別のチュートリアルでMySQLをインストールし、 root のパスワード認証を有効にした場合、MySQLシェルにアクセスするには別のコマンドを使用する必要があります。 以下は、通常のユーザー権限でMySQLクライアントを実行し、認証することによってのみデータベース内の管理者権限を取得します。

  1. mysql -u root -p

MySQLプロンプトにアクセスできるようになったら、CREATE USERステートメントを使用して新しいユーザーを作成できます。 これらは、次の一般的な構文に従います。

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

CREATE USERの後に、ユーザー名を指定します。 この直後に@記号が続き、次にこのユーザーが接続するホスト名が続きます。 Ubuntuサーバーからローカルでこのユーザーにアクセスすることのみを計画している場合は、localhostを指定できます。 ユーザー名とホストの両方を一重引用符で囲む必要はありませんが、そうすることでエラーを防ぐことができます。

ユーザーの認証プラグインの選択に関しては、いくつかのオプションがあります。 前述のauth_socketプラグインは、有効なユーザーがデータベースにアクセスするためにパスワードを入力しなくても強力なセキュリティを提供するため、便利です。 ただし、外部プログラムがMySQLと対話する必要がある場合に、事態を複雑にする可能性のあるリモート接続も防止します。

別の方法として、構文のWITH authentication_plugin部分を完全に省略して、ユーザーにMySQLのデフォルトプラグインcaching_sha2_passwordで認証させることができます。 MySQLのドキュメントでは、強力なセキュリティ機能により、パスワードを使用してログインするユーザーにこのプラグインを推奨しています。

次のコマンドを実行して、caching_sha2_passwordで認証するユーザーを作成します。 sammyを希望のユーザー名に変更し、passwordを選択した強力なパスワードに変更してください。

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

:PHPの一部のバージョンには、caching_sha2_passwordで問題を引き起こす既知の問題があります。 このデータベースをPHPアプリケーション(たとえば、phpMyAdmin)で使用する場合は、代わりに、古いmysql_native_passwordプラグインで認証するユーザーを作成することをお勧めします。

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

よくわからない場合は、次のコマンドを使用して、caching_sha2_pluginで認証し、後でALTERで認証するユーザーをいつでも作成できます。

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

新しいユーザーを作成したら、適切な権限をユーザーに付与できます。 ユーザー権限を付与するための一般的な構文は次のとおりです。

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

この構文例のPRIVILEGE値は、指定されたdatabaseおよびtableに対してユーザーが実行できるアクションを定義します。 それぞれをコンマで区切ることにより、1つのコマンドで同じユーザーに複数の特権を付与できます。 データベース名とテーブル名の代わりにアスタリスク(*)を入力して、ユーザー特権をグローバルに付与することもできます。 SQLでは、アスタリスクは「すべての」データベースまたはテーブルを表すために使用される特殊文字です。

説明のために、次のコマンドは、CREATEALTER、およびDROPデータベース、テーブル、およびユーザーにグローバル特権を付与し、[に権限を付与します。サーバー上の任意のテーブルからのX166X]、UPDATE、およびDELETEデータ。 また、SELECTを使用してデータをクエリし、REFERENCESキーワードを使用して外部キーを作成し、RELOAD特権を使用してFLUSH操作を実行する機能をユーザーに付与します。 ただし、ユーザーに必要な権限のみを付与する必要があるため、必要に応じてユーザーの権限を自由に調整してください。

使用可能な特権の完全なリストは、公式のMySQLドキュメントにあります。

このGRANTステートメントを実行し、sammyを独自のMySQLユーザー名に置き換えて、ユーザーに次の特権を付与します。

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

このステートメントにはWITH GRANT OPTIONも含まれていることに注意してください。 これにより、MySQLユーザーは、システム上の他のユーザーに自分が持っているすべてのアクセス許可を付与できます。

警告:一部のユーザーは、MySQLユーザーにALL PRIVILEGES特権を付与したい場合があります。これにより、rootユーザーの特権に類似した幅広いスーパーユーザー特権が提供されます。

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

このMySQLユーザーにアクセスできる人は誰でもサーバー上のすべてのデータベースを完全に制御できるため、このような幅広い特権を軽く付与しないでください。

これに続いて、FLUSH PRIVILEGESコマンドを実行することをお勧めします。 これにより、前述のCREATE USERおよびGRANTステートメントの結果としてサーバーがキャッシュしたメモリが解放されます。

  1. FLUSH PRIVILEGES;

次に、MySQLクライアントを終了できます。

  1. exit

将来、新しいMySQLユーザーとしてログインするには、次のようなコマンドを使用します。

  1. mysql -u sammy -p

-pフラグを使用すると、MySQLクライアントは認証のためにMySQLユーザーのパスワードの入力を求められます。

最後に、MySQLのインストールをテストしましょう。

ステップ4—MySQLをテストする

インストール方法に関係なく、MySQLは自動的に実行を開始するはずです。 これをテストするには、そのステータスを確認します。

  1. systemctl status mysql.service

次のような出力が表示されます。

Output
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago Main PID: 10382 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 1137) Memory: 370.0M CGroup: /system.slice/mysql.service └─10382 /usr/sbin/mysqld

MySQLが実行されていない場合は、sudo systemctl start mysqlで開始できます。

追加のチェックとして、管理コマンドを実行できるクライアントであるmysqladminツールを使用してデータベースに接続してみることができます。 たとえば、このコマンドは、 sammy -u sammy)という名前のMySQLユーザーとして接続し、パスワード(-p)の入力を求め、バージョンを返すように指示します。 必ずsammyを専用のMySQLユーザーの名前に変更し、プロンプトが表示されたらそのユーザーのパスワードを入力してください。

  1. sudo mysqladmin -p -u sammy version

次のような出力が表示されます。

Output
mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu)) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Server version 8.0.19-0ubuntu5 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 10 min 44 sec Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038

これは、MySQLが稼働していることを意味します。

結論

これで、基本的なMySQLセットアップがサーバーにインストールされました。 次に実行できる次の手順の例をいくつか示します。

モバイルバージョンを終了