Ubuntu 22.04 のインストール mysql 8.0 とピット回避ガイド

MySQL は、一般的な LAMP (Linux、Apache、MySQL、PHP/Python/Perl) スタックの一部としてインストールできるオープン ソース データベース管理システムです。リレーショナル モデルを実装し、構造化照会言語 (SQL) を使用してデータを管理します。

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

MySQL のインストール

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

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql.service

これらのコマンドは MySQL をインストールして起動しますが、パスワードの設定やその他の構成変更を求めるプロンプトは表示されません。

MySQL の構成

MySQL を新規インストールする場合は、データベース管理システムに含まれるセキュリティ スクリプトを実行する必要があります。このスクリプトは、リモート root ログインを許可しない、サンプル ユーザーを削除するなど、安全性の低いいくつかのデフォルト オプションを変更します。

警告: 2022 年 7 月の時点では、追加の設定を行わずに mysql_secure_installation スクリプトを実行すると、エラーが発生します。その理由は、このスクリプトはインストールのルート MySQL アカウントにパスワードを設定しようとしますが、Ubuntu インストールではデフォルトでこのアカウントがパスワードで接続するように構成されていないためです。

2022 年 7 月より前は、このスクリプトは、root アカウントのパスワードを設定し、残りのプロンプトを続行しようとすると、サイレントに失敗していました。ただし、この記事の執筆時点では、パスワードを入力して確認した後、スクリプトは次のエラーを返します。

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:

これにより、スクリプトは再帰ループに入ります。このループは、ターミナル ウィンドウを閉じることによってのみ終了できます。

mysql_secure_installation スクリプトは、MySQL インストールの保護に役立つ他の多くの操作を実行するため、MySQL を使用してデータの管理を開始する前にスクリプトを実行することをお勧めします。ただし、この再帰ループに入らないようにするには、最初に root MySQL ユーザーの認証方法を調整する必要があります。

まずMySQLターミナルに入ります

sudo mysql

次に、次の ALTER USER コマンドを実行して、root ユーザーの認証方法をパスワードを使用する認証方法に変更します。次の例では、認証方法を mysql_native_password に変更します。

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

次に、MySQL を終了します

exit

その後、mysql_secure_installation スクリプトを問題なく実行できます。

sudo 権限で mysql_secure_installation を実行する

sudo mysql_secure_installation

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

Validate Password プラグインのセットアップを選択した場合、パスワードで認証する作成する MySQL ユーザーは、選択したポリシーを満たすパスワードを持つ必要があります。

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

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

Output
Please set the password for root here.


New password:

Re-enter new password:

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

Verify Password プラグインを使用すると、新しいパスワードの強度に関するフィードバックが届きます。次に、スクリプトは、入力したばかりのパスワードを引き続き使用するか、新しいパスワードを入力するかを尋ねます。入力したパスワードの強度に満足している場合は、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 を再度開き、root ユーザーの認証方法をデフォルト値の auth_socket に戻すことができます。パスワードを使用して root MySQL ユーザーとして認証するには、次のコマンドを実行します。

mysql -u root -p

次に、次のコマンドを使用して、デフォルトの認証方法の使用に戻ります。

これは、sudo mysql コマンドを使用して、root として MySQL に再度接続できることを意味します。

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

専用の MySQL ユーザーを作成し、権限を付与する

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

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

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

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

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 USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

新しいユーザーを作成した後、それらのユーザーに適切な権限を付与できます。ユーザー権限を付与するための一般的な構文は次のとおりです (PRIVILEGE を CREATE などに置き換える必要があります)。

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

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

この点を説明するために、次のコマンドは、データベース、テーブル、ユーザーを作成、変更、削除するためのグローバル権限と、サーバー上の任意のテーブルからデータを挿入、更新、削除する権限をユーザーに付与します。また、SELECT を使用してデータをクエリしたり、REFERENCES キーワードを使用して外部キーを作成したり、RELOAD 権限を使用して FLUSH 操作を実行したりする機能もユーザーに付与されます。ただし、ユーザーには必要な権限のみを付与する必要があるため、必要に応じて自分のユーザーの権限を自由に調整してください。

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

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, 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

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

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

TestMySQL

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

systemctl status mysql.service

出力内容は以下のとおりです。

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-06-13 15:43:21 CST; 35min ago
    Process: 248356 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 248364 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 18804)
     Memory: 371.1M
        CPU: 10.291s
     CGroup: /system.slice/mysql.service
             └─248364 /usr/sbin/mysqld

MySQL が実行されていない場合は、sudo systemctl start mysql を使用して起動できます。

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

sudo mysqladmin -p -u sammy version

出力例は次のとおりです。

mysqladmin  Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2023, 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.33-0ubuntu0.22.04.2
Protocol version  10
Connection    Localhost via UNIX socket
UNIX socket    /var/run/mysqld/mysqld.sock
Uptime:      37 min 20 sec

Threads: 2  Questions: 41  Slow queries: 0  Opens: 199  Flush tables: 3  Open tables: 118  Queries per second avg: 0.018

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

結論は

この時点で、基本的な MySQL セットアップがサーバーにインストールされました。

おすすめ

転載: blog.csdn.net/weixin_39636364/article/details/131234559