Ubuntu22.04にMySQLをインストールする方法
序章
MySQL はオープンソースのデータベース管理システムであり、一般的に人気のある LAMP (Linux、Apache、MySQL、PHP / Python / Perl)スタックの一部としてインストールされます。 リレーショナルモデルを実装し、構造化クエリ言語(SQLとしてよく知られています)を使用してデータを管理します。
このチュートリアルでは、MySQLバージョン8.0をUbuntu22.04サーバーにインストールする方法について説明します。 これを完了すると、次のWebサイトまたはアプリケーションの構築に使用できる実用的なリレーショナルデータベースができあがります。
前提条件
このチュートリアルに従うには、次のものが必要です。
- 非ルート管理ユーザーとUFWで構成されたファイアウォールを備えた1つのUbuntu22.04サーバー。 これを設定するには、Ubuntu22.04の初期サーバー設定ガイドに従ってください。
ステップ1—MySQLをインストールする
Ubuntu 22.04では、APTパッケージリポジトリを使用してMySQLをインストールできます。 この記事の執筆時点で、デフォルトのUbuntuリポジトリで利用可能なMySQLのバージョンはバージョン8.0.28です。
最近インストールしていない場合は、サーバーのパッケージインデックスを更新します。
- sudo apt update
次に、をインストールします mysql-server
パッケージ:
- sudo apt install mysql-server
サーバーがを使用して実行されていることを確認します systemctl start
指図:
- sudo systemctl start mysql.service
これらのコマンドはMySQLをインストールして起動しますが、パスワードの設定やその他の構成変更を求めるプロンプトは表示されません。 これによりMySQLのインストールが安全でなくなるため、次にこれに対処します。
ステップ2—MySQLの構成
MySQLを新規インストールする場合は、データベース管理システムに含まれているセキュリティスクリプトを実行する必要があります。 このスクリプトは、リモート root ログインの禁止やサンプルユーザーの削除など、安全性の低いデフォルトオプションの一部を変更します。
Warning: As of July 2022, an error will occur when you run the mysql_secure_installation
script without some further configuration. The reason is that this script will attempt to set a password for the installation’s root MySQL account but, by default on Ubuntu installations, this account is not configured to connect using a password.
Prior to July 2022, this script would silently fail after attempting to set the root account password and continue on with the rest of the prompts. However, as of this writing the script will return the following error after you enter and confirm a password:
Output ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
New password:
This will lead the script into a recursive loop which you can only get out of by closing your terminal window.
Because the mysql_secure_installation
script performs a number of other actions that are useful for keeping your MySQL installation secure, it’s still recommended that you run it before you begin using MySQL to manage your data. To avoid entering this recursive loop, though, you’ll need to first adjust how your root MySQL user authenticates.
First, open up the MySQL prompt:
- sudo mysql
Then run the following ALTER USER
command to change the root user’s authentication method to one that uses a password. The following example changes the authentication method to mysql_native_password
:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
After making this change, exit the MySQL prompt:
- exit
Following that, you can run the mysql_secure_installation
script without issue.
Once the security script completes, you can then reopen MySQL and change the root user’s authentication method back to the default, auth_socket
. To authenticate as the root MySQL user using a password, run this command:
- mysql -u root -p
Then go back to using the default authentication method using this command:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
This will mean that you can once again connect to MySQL as your root user using the sudo mysql
command.
でセキュリティスクリプトを実行します sudo
:
- sudo mysql_secure_installation
これにより、MySQLインストールのセキュリティオプションにいくつかの変更を加えることができる一連のプロンプトが表示されます。 最初のプロンプトでは、Validate Password Pluginを設定するかどうかを尋ねられます。このプラグインを使用して、新しいMySQLユーザーのパスワード強度を有効と見なす前にテストできます。
パスワード検証プラグインを設定することを選択した場合、パスワードで認証するMySQLユーザーは、選択したポリシーを満たすパスワードを持っている必要があります。
OutputSecuring 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ユーザーのパスワードを設定することです。 選択した安全なパスワードを入力して確認します。
OutputPlease set the password for root here.
New password:
Re-enter new password:
root MySQLユーザーのパスワードを設定した場合でも、このユーザーは現在、MySQLシェルに接続するときにパスワードで認証するように構成されていないことに注意してください。
Validate Password Pluginを使用した場合は、新しいパスワードの強度に関するフィードバックを受け取ります。 次に、スクリプトは、入力したばかりのパスワードを続行するか、新しいパスワードを入力するかを尋ねます。 入力したパスワードの強度に満足していると仮定して、次のように入力します。 Y
スクリプトを続行するには:
OutputEstimated 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システムでは、 rootMySQLユーザーは auth_socket
パスワードではなく、デフォルトでプラグイン。 このプラグインでは、MySQLクライアントを呼び出すオペレーティングシステムユーザーの名前がコマンドで指定されたMySQLユーザーの名前と一致する必要があるため、呼び出す必要があります mysql
と sudo
root MySQLユーザーにアクセスするための特権:
- sudo mysql
注:別のチュートリアルでMySQLをインストールし、 root のパスワード認証を有効にした場合、MySQLシェルにアクセスするには別のコマンドを使用する必要があります。 以下は、通常のユーザー権限でMySQLクライアントを実行し、認証することによってのみデータベース内の管理者権限を取得します。
- mysql -u root -p
MySQLプロンプトにアクセスできるようになったら、次のコマンドを使用して新しいユーザーを作成できます。 CREATE USER
声明。 これらは、次の一般的な構文に従います。
- CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
後 CREATE USER
、ユーザー名を指定します。 この直後に @
署名してから、このユーザーが接続するホスト名。 Ubuntuサーバーからローカルでこのユーザーにアクセスすることのみを計画している場合は、次のように指定できます localhost
. ユーザー名とホストの両方を一重引用符で囲む必要はありませんが、そうすることでエラーを防ぐことができます。
ユーザーの認証プラグインの選択に関しては、いくつかのオプションがあります。 The auth_socket
前述のプラグインは、有効なユーザーがデータベースにアクセスするためにパスワードを入力しなくても強力なセキュリティを提供するため、便利です。 ただし、外部プログラムがMySQLと対話する必要がある場合に、事態を複雑にする可能性のあるリモート接続も防止します。
別の方法として、 WITH authentication_plugin
構文の一部は、ユーザーにMySQLのデフォルトプラグインで認証させるためのものです。 caching_sha2_password
. MySQLのドキュメントでは、強力なセキュリティ機能により、パスワードを使用してログインするユーザーにこのプラグインを推奨しています。
次のコマンドを実行して、で認証するユーザーを作成します caching_sha2_password
. 必ず変更してください sammy
ご希望のユーザー名に password
選択した強力なパスワードに:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
注:PHPの一部のバージョンには、次の問題を引き起こす既知の問題があります。 caching_sha2_password
. このデータベースをPHPアプリケーション(たとえば、phpMyAdmin)で使用する場合は、古いもので認証するユーザーを作成することをお勧めしますが、それでも安全です。 mysql_native_password
代わりにプラグイン:
- CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
よくわからない場合は、で認証するユーザーをいつでも作成できます caching_sha2_plugin
その後 ALTER
後でこのコマンドを使用します。
- ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
新しいユーザーを作成したら、適切な権限をユーザーに付与できます。 ユーザー権限を付与するための一般的な構文は次のとおりです。
- GRANT PRIVILEGE ON database.table TO 'username'@'host';
The PRIVILEGE
この構文例の値は、指定されたものに対してユーザーが実行できるアクションを定義します。 database
と table
. それぞれをコンマで区切ることにより、1つのコマンドで同じユーザーに複数の特権を付与できます。 アスタリスク(*
)データベース名とテーブル名の代わりに。 SQLでは、アスタリスクは「すべての」データベースまたはテーブルを表すために使用される特殊文字です。
説明のために、次のコマンドはユーザーにグローバル特権を付与します CREATE
, ALTER
、 と DROP
データベース、テーブル、ユーザー、および INSERT
, UPDATE
、 と DELETE
サーバー上の任意のテーブルからのデータ。 また、ユーザーにデータをクエリする機能を付与します SELECT
、で外部キーを作成します REFERENCES
キーワード、および実行 FLUSH
との操作 RELOAD
特権。 ただし、ユーザーに必要な権限のみを付与する必要があるため、必要に応じてユーザーの権限を自由に調整してください。
使用可能な特権の完全なリストは、公式のMySQLドキュメントにあります。
これを実行します GRANT
ステートメント、置換 sammy
独自のMySQLユーザーの名前を使用して、これらの特権をユーザーに付与するには、次のようにします。
- 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ユーザーの特権に類似した幅広いスーパーユーザー特権を提供します。
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
このMySQLユーザーにアクセスできる人は誰でもサーバー上のすべてのデータベースを完全に制御できるため、このような幅広い特権を軽く付与しないでください。
これに続いて、を実行することをお勧めします FLUSH PRIVILEGES
指図。 これにより、前述の結果としてサーバーがキャッシュしたメモリが解放されます。 CREATE USER
と GRANT
ステートメント:
- FLUSH PRIVILEGES;
次に、MySQLクライアントを終了できます。
- exit
将来、新しいMySQLユーザーとしてログインするには、次のようなコマンドを使用します。
- mysql -u sammy -p
The -p
フラグを設定すると、MySQLクライアントは認証のためにMySQLユーザーのパスワードの入力を求められます。
最後に、MySQLのインストールをテストしましょう。
ステップ4—MySQLをテストする
インストール方法に関係なく、MySQLは自動的に実行を開始するはずです。 これをテストするには、そのステータスを確認します。
- 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 Mon 2022-04-11 16:04:39 UTC; 2h 36min ago
Process: 2593 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 2601 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 1119)
Memory: 354.3M
CPU: 19.944s
CGroup: /system.slice/mysql.service
└─2601 /usr/sbin/mysqld
MySQLが実行されていない場合は、次のコマンドで開始できます。 sudo systemctl start mysql
.
追加のチェックについては、を使用してデータベースに接続してみてください。 mysqladmin
ツール。管理コマンドを実行できるクライアントです。 たとえば、このコマンドは、 sammy という名前のMySQLユーザーとして接続するように指示します(-u sammy
)、パスワードの入力を求める(-p
)、バージョンを返します。 必ず変更してください sammy
専用のMySQLユーザーの名前に入力し、プロンプトが表示されたらそのユーザーのパスワードを入力します。
- sudo mysqladmin -p -u sammy version
以下は出力の例です。
Outputmysqladmin Ver 8.0.28-0ubuntu4 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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.28-0ubuntu4
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 2 hours 31 min 57 sec
Threads: 2 Questions: 25 Slow queries: 0 Opens: 160 Flush tables: 3 Open tables: 79 Queries per second avg: 0.000
これは、MySQLが稼働していることを意味します。
結論
これで、基本的なMySQLセットアップがサーバーにインストールされました。 次に実行できる次の手順の例をいくつか示します。