【Linux】MySQLのインストールと必須の初期設定

この記事では、LinuxにMySQLをインストールして、最低限必要な設定をを行い、MySQLを利用できるようになるまでを説明します。

インストールは簡単なので、最低限やっておくべきセキュリティの設定などの説明が主な内容になります。

LinuxにはCentOSの後継として有力なAlmaLinuxを使いっています。CentOS は馴染みがあるのですが、CentOSは今後新しいバージョンがリリースされません。そのためCentOS同様にRed Hat Enterprise Linux互換のOSであるAlmaLinuxを利用します。

環境

この記事は次の環境で確認を行なっています。

  • MySQL 8.0
  • AlmaLinux 9.2
目次

MySQLサーバーのインストール

MySQLサーバーと関連パッケージをインストールします。現状、デフォルトのリポジト(AlmaLinux 9のリポジトリ)で、比較的新しいバージョンのMySQLが提供されていますので、そこからインストールします。

# dnf install mysql-server

MySQL Yumリポジトリからインストールする場合は、MySQLのドキュメントを参照してください。

MySQL Yumリポジトリからインストールする場合は、MySQLサーバーのセットアップ手順がこの記事と異なることがありますので注意してください。

MySQLサーバーの起動と自動起動の有効化

はじめにMySQLサーバーの現在の状態を確認します。

# systemctl status mysqld
○ mysqld.service - MySQL 8.0 database server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; preset: disabled)
     Active: inactive (dead)

MySQLサーバーの自動起動を有効化します(上記表示結果の赤字部分が disabled の場合)。

# systemctl enable mysqld

MySQLサーバーを起動します(上記表示結果の緑字部分が inactive (dead) の場合)。

# systemctl start mysqld

MySQLサーバーが起動していて、自動起動設定の有効(enabled)になっているか確認します。

# systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
     Active: active (running) since Sun 2023-06-18 04:20:31 UTC; 5s ago
...

最初にやっておくべきセキリティ設定や確認など

MySQLをインストールした直後は、セキュアな状態ではありません。MySQLをインストールしたらバージョンに関わらず、セキュリティなどに関する設定をいくつか実施する必要があります。

MySQLサーバーへのログイン確認

MySQLサーバーにrootユーザーでログインできるか確認しておきます。デフォルトで、rootユーザーのパスワードは設定されていませんので、次のコマンドでログインできます。

# mysql -u root

ログインできると「mysql>」プロンプトが表示されます。

MySQLサーバーへのログインが確認できたら、一旦、ログアウトします。

mysql> exit
rootユーザーのパスワード設定

この時点でrootユーザーのパスワードを設定しても構いません。それには次のステートメントを使います。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

mysql_secure_installationの実行

mysql_secure_installationは、セキュリティを強化するために提供されているプログラムです。rootユーザーのパスワード設定、匿名ユーザーの削除、testデータベースの削除などのセキュリティ設定を一括して行うことができます。

プログラムを開始するには、シェルで mysql_secure_installation を実行します。rootパスワード入力を求められたらパスワードを入力します。パスワードが空なら入力を求められることはありません。

# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

実行するといくつかの質問が表示されます。対話形式の質問に回答することで設定の変更を実施していきます。

最初にvalidate_password コンポーネントがインストールされていなければ、コンポーネントをインストールするか尋ねられます。validate_password コンポーネントは、ユーザーの脆弱なパスワードの使用を防止したり、パスワード強度のチェックなどパスワードを強固に保つためのコンポーネントです。

本番で使用するのであれば validate_password コンポーネントをインストールしましょう。インストールするには「y または Y」を入力します。

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

validate_password コンポーネントをインストールすると、パスワードポリシーの強度の選択を求められます。適用するパスワードポリシーの強度を選択します。

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: 1

ここでは「1」を入力してMEDIUMを選択しました。

今回の例ではrootのパスワードが空なので、問答無用でrootの新しいパスワードの入力が促されます。パスワードを設定している場合は、変更するか確認を求められます。ここでは変更するためにパスワードを2回入力します。

Please set the password for root here.

New password: 

Re-enter new password: 

今回、入力したパスワードの強度は100と判定されたようです。そのまま確定するには「y または Y」を入力します。やり直したい場合はそれ以外のキーを入力します。

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 または Y」を選択します。

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

rootユーザーがリモートからログインできるようになっていれば、それをできないようにします。セキュリティ上、rootユーザーのリモートログインは好ましくありませんので、制限するために「y」を入力します。

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

リモートからrootで作業をしたい場合は、一般ユーザーでログインしてからrootにスイッチするべきです。

デフォルトで用意されたテスト用のデータベースがあれば削除し、誰もアクセスできないようにします。通常はセキュリティ強化のため「y または Y」で削除します。

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

最後に、権限テーブルをリロードするか尋ねられます。設定をすぐに反映するために「y または Y」でリロードします。

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

以上で完了です。

mysql_secure_installationで変更項目の確認

mysql_secure_installationで設定変更した項目の確認方法を紹介しておきましょう。

validate_password コンポーネントがインストールされているかは、次のステートメントで確認できます。

mysql> SELECT * FROM mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn                      |
+--------------+--------------------+------------------------------------+
|            1 |                  1 | file://component_validate_password |
+--------------+--------------------+------------------------------------+

これはインストールされたすべてのコンポーネントを表示します。validate_password コンポーネントがインストールされていれば「file://component_validate_password」が表示されます。

validate_password コンポーネントのインストールやアンインストールは次のステートメンで行うこともできます。

mysql> INSTALL COMPONENT 'file://component_validate_password';
mysql> UNINSTALL COMPONENT 'file://component_validate_password';

ユーザー、ホスト、パスワードのハッシュ値は次のステートメントで確認できます。

mysql> SELECT User, Host, authentication_string FROM mysql.user;

すべてのデータベースは、次のステートメントで確認できます。

mysql> SHOW DATABASES;

一般ユーザーを追加する

rootユーザー以外のユーザーも作成すべきです。ここではadminユーザーを作成し、そのユーザーに権限を付与します。

はじめにmysqlクライアントでサーバーへログインします。次のコマンドを実行し、パスワードを入力します。

# mysql -u root -p
Enter password: 

adminユーザーを作成し、すべてを操作できる権限を付与します。

mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

この例では、作成したユーザーに権限を与えすぎかもしれません。本番では、どのユーザーにどれくらいの権限を与えるか、きちんと設計します。

ユーザーに付与した権限は次のコマンドで表示できます。

mysql> SHOW GRANTS FOR 'admin'@'localhost';

タイムゾーンの確認

日時の基準が間違っていると後で厄介なことになりますので、あらかじめMySQLサーバーのタイムゾーンは確認しておきましょう。現在のグローバルおよびセッションのタイムゾーンを表示するには次のステートメントを実行します。

mysql> SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
+--------------------+---------------------+
| @@GLOBAL.time_zone | @@SESSION.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+

値『SYSTEM」は、MySQLサーバーのタイムゾーンがシステムのタイムゾーンと同じであることを示します。

システムのタイムゾーンは次のステートメントで表示できます。

mysql> SELECT @@system_time_zone;
+--------------------+
| @@system_time_zone |
+--------------------+
| JST                |
+--------------------+

Linuxでタイムゾーンを確認するにはtimedatectlコマンドを使います。

# timedatectl
               Local time: Mon 2023-06-19 00:57:19 JST
           Universal time: Sun 2023-06-18 15:57:19 UTC
                 RTC time: Sun 2023-06-18 15:57:18
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

文字コードの確認

文字コードも間違っていると後から変更するのが面倒なので、最初に確認しておきましょう。MySQLの文字コードは次のステートメントで確認できます。

mysql> SHOW SESSION VARIABLES LIKE 'character\_set\_%';
+--------------------------+---------+
| Variable_name            | Value   |
+--------------------------+---------+
| character_set_client     | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database   | utf8mb3 |
| character_set_filesystem | binary  |
| character_set_results    | utf8mb4 |
| character_set_server     | utf8mb4 |
| character_set_system     | utf8mb3 |
+--------------------------+---------+

この例では、データ格納のデフォルトの文字コードがutf8mb4で、サーバーとクライアント間のやり取りの文字コードもutf8mb4であることがわかります。

インストール後のテスト

インストールしたら正常に動作するか簡単なテストをいくつか実行します。

最初にmysqladmin を使用してサーバーが動作していることを確認します。 シェルから次のコマンドを実行して、サーバーの起動および接続を確認します。

# mysqladmin version -u root -p version
# mysqladmin version -u root -p variables

サーバーから情報を取得できるか確認します。 mysqlshowはサーバーのデータベースを表示します。ます。

# mysqlshow -u root -p

特定のデータベースのテーブルを表示するために mysqlshow にデータベースを指定します。

# mysqlshow -u root -p mysql

mysql クライアントでテーブルから情報を取得します。

# mysql -u root -p  -e "SELECT User, Host, plugin FROM mysql.user" mysql

これらが正常に動作すれば、最低限は問題ありません。

おわりに

この記事ではMySQLのインストールに最低限必要なことを説明しました。では、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

・PM、SE、SIなどを20年以上経験
・ネットワークスペシャリスト、セキュリティスペシャリストなど複数の資格を保有

目次