初学者向け：AlmaLinuxにMySQLをインストールし、基本的なCRUD操作をしてみた

## はじめに

今回は、自宅のVirtualBox上で稼働しているAlmaLinuxにMySQLを導入し、簡単なCRUD（Create, Read, Update, Delete）の操作を実行する方法を紹介します。

:::note warn
***AlmaLinuxはCentOSの後継として人気があり、MySQLは多くのアプリケーションで使用されるデータベース管理システムです。***
:::

本記事では、基本的なインストール手順から実際にデータベースを作成し、CRUD操作を行う方法まで解説します。

## 前提条件

:::note
本記事では以下の環境を前提としています。

**・OS: AlmaLinux（CentOSの後継）**
**・仮想環境: VirtualBox**
**・ネットワーク: インターネットに接続可能であること**
:::

事前にAlmaLinuxがVirtualBox上で稼働していることを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/8b4ab169-9733-b69f-79e1-22db39b3f2ed.png)

## 知識整理

AlmaLinuxはRed Hat系のLinuxディストリビューションで、CentOSの代替として多くのサーバー環境で利用されています。

https://almalinux.org/

MySQLは関係データベース管理システム（RDBMS）で、構造化されたデータを効率的に管理できます。

https://kinsta.com/jp/knowledgebase/what-is-mysql/

AlmaLinuxにMySQLを導入するには、MySQLのリポジトリを追加し、パッケージマネージャ（dnf）を使用してインストールを行います。

***インストール後は、データベースを作成し、簡単なCRUD操作をハンズオンしてみます！***

## データベースの作成の流れ

まず、MySQLをAlmaLinuxにインストールする手順を解説します。

### MySQLの導入

MySQL公式のリポジトリを追加するため、以下のコマンドでMySQLのリポジトリをダウンロードしてインストールします。

```bash
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
```

**実際のインストール画面**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3df40d73-1e2b-c959-c0c5-b1e5cfe1bb04.png)

```bash
・・・・（省略）
Running transaction
  Preparing        :                                                                                                             1/1
  Installing       : mysql80-community-release-el8-1.noarch                                                                      1/1
  Verifying        : mysql80-community-release-el8-1.noarch                                                                      1/1

Installed:
  mysql80-community-release-el8-1.noarch

Complete!
You have new mail in /var/spool/mail/root
```


MySQLのリポジトリが正しく追加されているか確認します。

```bash
sudo dnf repolist enabled | grep mysql
```

正常に追加されていれば、「mysql80-community」が表示されるはずです。

```bash
[root@HONDA-TEST ~]# sudo dnf repolist enabled | grep mysql
mysql-connectors-community MySQL Connectors Community
mysql-tools-community      MySQL Tools Community
mysql80-community          MySQL 8.0 Community Server
You have new mail in /var/spool/mail/root
```

MySQLの最新バージョンをインストールします。

```bash
sudo dnf install mysql-server
```

MySQLサービスを起動し、OS起動時に自動で起動するように設定します。

```bash
sudo systemctl start mysqld
sudo systemctl enable mysqld
```

MySQLのインストール後、初期設定が必要です。mysql_secure_installationを実行し、初期のセキュリティ設定を行います。

```bash
sudo mysql_secure_installation
```

***必要に応じて、新しいパスワードの設定や匿名ユーザーの削除、テストデータベースの削除などが求められますので、指示に従って入力してください。***

```bash
[root@HONDA-TEST mysql]# sudo mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

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
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.


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.

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.

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!
You have new mail in /var/spool/mail/root
```

ここでは、rootユーザーのパスワード設定や不要なユーザーの削除を行います。rootユーザーとしてMySQLにログインします。

```bash
sudo mysql -u root -p
```

パスワードを入力すると、MySQLにログインできます。

## データベースの作成

次に、新しいデータベースを作成します。test_dbというデータベースが作成されます。

```sql
CREATE DATABASE test_db;
```

新しいユーザーを作成し、データベースにアクセスできるように権限を付与します。***これで、test_userがtest_dbにアクセスできるようになります。***

```sql
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
FLUSH PRIVILEGES;
```

「**Query OK, 0 rows affected (0.10 sec)**」となり、成功していることが確認できました。

以下のコマンドで「test_user」としてログインできます。

```sql
sudo mysql -u test_user -p
```


## 簡単なCRUDの処理の検証

CRUDとは、データベースの基本的な操作であるCreate（作成）、Read（読み取り）、Update（更新）、Delete（削除）の略です。

***以下では、具体的にCRUD操作を行う例をもとに詳細な説明を加えます。***

### テーブルの作成

まず、CRUD操作を行うためのテーブルを作成します。

```sql
USE test_db;
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT
);
```

ここでの簡単な説明は以下になります。

:::note warn
**・id: 自動増分の整数型（主キー）。**
**・name: 最大100文字の文字列型。**
**・age: 整数型。**
:::


### Create（データの作成）

新しいユーザーを追加します。これでusersテーブルにAliceとBobのレコードが作成されます。

```sql
mysql> INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25);
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0
```

### Read（データの読み取り）

テーブルからデータを取得します。usersテーブル内の全データを表示します。

```sql
mysql> SELECT * FROM users;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | Alice |   30 |
|  2 | Bob   |   25 |
+----+-------+------+
2 rows in set (0.00 sec)
```

### Update（データの更新）

特定のユーザーの情報を変更します。nameがBobのレコードのageを26に更新します。

```sql
mysql> UPDATE users SET age = 26 WHERE name = 'Bob';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
```

### Delete（データの削除）

特定のユーザーを削除します。nameがAliceのレコードを削除します。

```sql
mysql> DELETE FROM users WHERE name = 'Alice';
Query OK, 1 row affected (0.02 sec)
```

Aliceさんのレコードが削除されていることが確認できました。

```sql
mysql> SELECT * FROM users;
+----+------+------+
| id | name | age  |
+----+------+------+
|  2 | Bob  |   26 |
+----+------+------+
1 row in set (0.00 sec)
```


## まとめ
この記事では、VirtualBox上のAlmaLinuxにMySQLを導入する手順と、簡単なCRUD操作の検証方法を解説しました。

:::note alert
***MySQLのインストールは比較的簡単ですが、初期設定やセキュリティに注意することが重要です。***
:::


また、基本的なCRUD操作を通じて、MySQLの操作感をつかむことができたかと思います。

***ぜひ、自分の環境でも試してみてください！***

## 参考文献

https://aulta.co.jp/technical/server-build/almalinux92/mysql/dnf-install

https://qiita.com/witchcraze/items/4e18656d57656a3d6867