このチュートリアルの以前のバージョンはHazel Virdóによって書かれました
前書き
MySQLはオープンソースのデータベース管理システムであり、一般的に人気のある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に更新する場合は、代わりにthis MySQL 5.7 update guideを読み取ることができます。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
sudo
特権を持つ非rootユーザーとファイアウォールを含む、this initial server setup guideに従うことによってセットアップされた1つのUbuntu18.04サーバー。
[[step-1 -—- installing-mysql]] ==ステップ1—MySQLのインストール
Ubuntu 18.04では、デフォルトでMySQLの最新バージョンのみがAPTパッケージリポジトリに含まれています。 執筆時点では、それはMySQL 5.7です
これをインストールするには、サーバーのパッケージインデックスをapt
で更新します。
sudo apt update
次に、デフォルトパッケージをインストールします。
sudo apt install mysql-server
これにより、MySQLがインストールされますが、パスワードの設定やその他の構成の変更を求めるプロンプトは表示されません。 これによりMySQLのインストールが安全ではなくなるため、次に対処します。
[[step-2 -—- configuring-mysql]] ==ステップ2—MySQLの構成
新規インストールの場合は、付属のセキュリティスクリプトを実行する必要があります。 これにより、リモートルートログインやサンプルユーザーなどの安全性の低いデフォルトオプションの一部が変更されます。 MySQLの古いバージョンでは、データディレクトリも手動で初期化する必要がありましたが、現在は自動的に初期化されています。
セキュリティスクリプトを実行します。
sudo mysql_secure_installation
これにより、一連のプロンプトが表示され、MySQLインストールのセキュリティオプションを変更できます。 最初のプロンプトでは、MySQLパスワードの強度をテストするために使用できるValidate Password Pluginをセットアップするかどうかを尋ねられます。 選択に関係なく、次のプロンプトはMySQLrootユーザーのパスワードを設定することです。 選択した安全なパスワードを入力して確認します。
そこから、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に従ってこの設定を調整できます。
[[step-3 -—- optional-adjusting-user-authentication-and-privileges]] ==ステップ3—(オプション)ユーザー認証と特権の調整
MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、root MySQLユーザーは、パスワードではなく、デフォルトでauth_socket
プラグインを使用して認証するように設定されています。 これにより、多くの場合、セキュリティと使いやすさが向上しますが、外部プログラム(phpMyAdminなど)がユーザーにアクセスできるようにする必要がある場合にも事態が複雑になります。
パスワードを使用してMySQLにrootとして接続するには、認証方法を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
コマンドを実行します。 必ずpassword
を選択した強力なパスワードに変更してください。このコマンドは、手順2で設定したrootパスワードを変更することに注意してください。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
次に、FLUSH PRIVILEGES
を実行して、サーバーに許可テーブルを再ロードし、新しい変更を有効にするように指示します。
FLUSH PRIVILEGES;
各ユーザーが採用している認証方法をもう一度確認して、rootがauth_socket
プラグインを使用して認証されなくなったことを確認します。
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シェルを終了できます。
exit
あるいは、専用ユーザーでMySQLに接続する方がワークフローに適している場合もあります。 そのようなユーザーを作成するには、MySQLシェルをもう一度開きます。
sudo mysql
[。注意]##
Note:前の段落で説明したように、rootに対してパスワード認証を有効にしている場合は、MySQLシェルにアクセスするために別のコマンドを使用する必要があります。 以下は、通常のユーザー特権でMySQLクライアントを実行し、認証によってのみデータベース内の管理者特権を取得します。
mysql -u root -p
そこから、新しいユーザーを作成し、強力なパスワードを付与します。
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
次に、新しいユーザーに適切な権限を付与します。 たとえば、次のコマンドを使用して、データベース内のすべてのテーブルにユーザー権限を付与し、ユーザー権限を追加、変更、削除する権限を付与できます。
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
この時点で、FLUSH PRIVILEGES
コマンドを再度実行する必要はないことに注意してください。 このコマンドは、INSERT
、UPDATE
、またはDELETE
などのステートメントを使用して許可テーブルを変更する場合にのみ必要です。 新しいユーザーを作成したため、既存のユーザーを変更する代わりに、ここではFLUSH PRIVILEGES
は不要です。
これに続いて、MySQLシェルを終了します。
exit
最後に、MySQLインストールをテストします。
[[step-4 -—- testing-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
ツールを使用してデータベースに接続してみることができます。 たとえば、このコマンドは、MySQLにroot(-u root
)として接続し、パスワード(-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セットアップがサーバーにインストールされました。 次のステップの例をいくつか示します。