_このチュートリアルの以前のバージョンは、https://www.digitalocean.com/community/users/hazelnut [HazelVirdó] _によって作成されました。

前書き

MySQLは、一般的なhttps://www.digitalocean.com/community/tutorials/how-to-install-linuxの一部として一般にインストールされるオープンソースのデータベース管理システムです-apache-mysql-php-lamp-stack-ubuntu-18-04 [LAMP](Linux、Apache、MySQL、PHP / Python / Perl)スタック。 リレーショナルデータベースとSQL(Structured Query Language)を使用してデータを管理します。

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

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

このチュートリアルでは、Ubuntu 18.04サーバーにMySQLバージョン5.7をインストールする方法について説明します。 ただし、既存のMySQLインストールをバージョン5.7に更新する場合は、https://www.digitalocean.com/community/tutorials/how-to-prepare-for-your-mysql-5-7-を読むことができます。代わりに[このMySQL 5.7アップデートガイド]をアップグレードしてください。

前提条件

このチュートリアルを実行するには、次のものが必要です。

ステップ1-MySQLのインストール

Ubuntu 18.04では、デフォルトでMySQLの最新バージョンのみがAPTパッケージリポジトリに含まれています。 執筆時点では、それはMySQL 5.7です

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

sudo apt update

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

sudo apt install mysql-server

これにより、MySQLがインストールされますが、パスワードを設定したり、その他の構成を変更するように求められることはありません。 これにより、MySQLのインストールが安全ではなくなるため、次に対処します。

ステップ2-MySQLの構成

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

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

sudo mysql_secure_installation

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

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

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

出力

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プロンプトを開きます。

sudo mysql

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

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`コマンドを実行します。 必ず `++`を選択した強力なパスワードに変更してください。このコマンドは、ステップ2で設定した root *パスワードを変更することに注意してください。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

次に、 `+ FLUSH PRIVILEGES +`を実行して、サーバーに許可テーブルをリロードし、新しい変更を有効にするように指示します。

FLUSH PRIVILEGES;

各ユーザーが採用している認証方法を再度チェックして、* root *が `+ auth_socket +`プラグインを使用して認証を行っていないことを確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F |  | 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 * MySQLユーザーがパスワードを使用して認証されていることがわかります。 自分のサーバーでこれを確認したら、MySQLシェルを終了できます。

exit

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

sudo mysql

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

CREATE USER ''@'localhost' IDENTIFIED BY '';

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

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

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

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

exit

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

ステップ4-MySQLのテスト

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

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 +)、バージョンを返すように指示します。

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セットアップがサーバーにインストールされました。 次のステップの例をいくつか示します。