このチュートリアルの以前のバージョンは、HazelVirdóによって作成されました。

序章

MySQL はオープンソースのデータベース管理システムであり、一般的に人気のある LAMP (Linux、Apache、MySQL、PHP / Python / Perl)スタックの一部としてインストールされます。 リレーショナルデータベースとSQL(Structured Query Language)を使用してデータを管理します。

インストールの短いバージョンは単純です。パッケージインデックスを更新し、mysql-serverパッケージをインストールしてから、付属のセキュリティスクリプトを実行します。

  1. sudo apt update
  2. sudo apt install mysql-server
  3. sudo mysql_secure_installation

このチュートリアルでは、MySQLバージョン5.7をUbuntu18.04サーバーにインストールする方法について説明します。 ただし、既存のMySQLインストールをバージョン5.7に更新する場合は、代わりにこのMySQL5.7更新ガイドを読むことができます。

前提条件

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

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

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

Ubuntu 18.04では、デフォルトで最新バージョンのMySQLのみがAPTパッケージリポジトリに含まれています。 これを書いている時点では、それはMySQL5.7です。

これをインストールするには、サーバーのパッケージインデックスをaptで更新します。

  1. sudo apt update

次に、デフォルトのパッケージをインストールします。

  1. sudo apt install mysql-server

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

  1. sudo systemctl start mysql.service

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

ステップ2—MySQLの構成

新規インストールの場合は、付属のセキュリティスクリプトを実行する必要があります。 これにより、リモートルートログインやサンプルユーザーなどの安全性の低いデフォルトオプションの一部が変更されます。 古いバージョンのMySQLでは、データディレクトリも手動で初期化する必要がありましたが、これは現在自動的に行われます。

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

  1. sudo mysql_secure_installation

これにより、MySQLインストールのセキュリティオプションにいくつかの変更を加えることができる一連のプロンプトが表示されます。 最初のプロンプトでは、MySQLパスワードの強度をテストするために使用できるValidatePasswordPluginを設定するかどうかを尋ねられます。 選択に関係なく、次のプロンプトはMySQL rootユーザーのパスワードを設定することです。 選択した安全なパスワードを入力して確認します。

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

MySQLデータディレクトリを初期化するには、5.7.6より前のバージョンではmysql_install_dbを使用し、5.7.6以降ではmysqld --initializeを使用します。 ただし、ステップ1で説明したように、DebianディストリビューションからMySQLをインストールした場合、データディレクトリは自動的に初期化されました。 何もする必要はありません。 とにかくコマンドを実行しようとすると、次のエラーが表示されます。

出力
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

root MySQLユーザーのパスワードを設定した場合でも、このユーザーはMySQLシェルに接続するときにパスワードで認証するように構成されていないことに注意してください。 必要に応じて、手順3に従ってこの設定を調整できます。

ステップ3—(オプション)ユーザー認証と特権の調整

MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、 root MySQLユーザーは、パスワードではなく、デフォルトでauth_socketプラグインを使用して認証するように設定されています。 これにより、多くの場合、セキュリティと使いやすさが向上しますが、外部プログラム(phpMyAdminなど)にユーザーへのアクセスを許可する必要がある場合は、事態が複雑になる可能性もあります。

パスワードを使用してrootとしてMySQLに接続するには、認証方法をauth_socketからmysql_native_passwordに切り替える必要があります。 これを行うには、ターミナルからMySQLプロンプトを開きます。

  1. sudo mysql

次に、次のコマンドを使用して、各MySQLユーザーアカウントが使用する認証方法を確認します。

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | 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 | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

この例では、rootユーザーが実際にauth_socketプラグインを使用して認証していることがわかります。 root アカウントをパスワードで認証するように構成するには、次のALTER USERコマンドを実行します。 必ずpasswordを選択した強力なパスワードに変更してください。このコマンドは、手順2で設定したrootパスワードを変更することに注意してください。

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

次に、FLUSH PRIVILEGESを実行します。これにより、サーバーに許可テーブルを再読み込みして、新しい変更を有効にするように指示します。

  1. FLUSH PRIVILEGES;

各ユーザーが採用している認証方法をもう一度確認して、rootauth_socketプラグインを使用して認証されなくなったことを確認します。

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

この出力例では、 rootMySQLユーザーがパスワードを使用して認証するようになっていることがわかります。 自分のサーバーでこれを確認したら、MySQLシェルを終了できます。

  1. exit

あるいは、専用ユーザーでMySQLに接続する方がワークフローに適していると感じる人もいます。 このようなユーザーを作成するには、MySQLシェルをもう一度開きます。

  1. sudo mysql

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

  1. mysql -u root -p

そこから、新しいユーザーを作成し、強力なパスワードを設定します。

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

次に、新しいユーザーに適切な権限を付与します。 たとえば、次のコマンドを使用して、データベース内のすべてのテーブルにユーザー権限を付与し、ユーザー権限を追加、変更、および削除する権限を付与できます。

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

この時点で、FLUSH PRIVILEGESコマンドを再度実行する必要はないことに注意してください。 このコマンドは、INSERTUPDATEDELETEなどのステートメントを使用して許可テーブルを変更する場合にのみ必要です。 新しいユーザーを作成したため、既存のユーザーを変更する代わりに、ここではFLUSH PRIVILEGESは不要です。

これに続いて、MySQLシェルを終了します。

  1. exit

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

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

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

  1. systemctl status mysql.service

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

出力
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
   Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
 Main PID: 3754 (mysqld)
    Tasks: 28
   Memory: 142.3M
      CPU: 1.994s
   CGroup: /system.slice/mysql.service
           └─3754 /usr/sbin/mysqld

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

追加のチェックとして、管理コマンドを実行できるクライアントであるmysqladminツールを使用してデータベースに接続してみることができます。 たとえば、このコマンドは、 root -u root)としてMySQLに接続し、パスワード(-p)の入力を求め、バージョンを返すように指示します。

  1. sudo mysqladmin -p -u root version

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

出力
mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, 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		5.7.21-1ubuntu1
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/run/mysqld/mysqld.sock
Uptime:			30 min 54 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006

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

結論

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