MySQL 5.7 を Ubuntu 22.04 にインストールする

# MySQL 5.7 を Ubuntu 22.04 にインストールする

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu 22.04 に MySQL 5.7 をインストールする手順を紹介します。
![mysql_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/f80e3801-07d5-f284-4d94-7942e880b1fd.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/studio_meowtoon/items/6119ab05d8b13527efd8 
 
## 実現すること

Ubuntu 22.04 に MySQL 5.7 をインストールします。

:::note alert
**Ubuntu 22.04** に **apt** コマンドでインストールされる MySQL のバージョンは **MySQL 8.0** です。この記事では **MySQL 5.7** をインストールする方法を紹介しています。ご注意ください。
:::

https://qiita.com/studio_meowtoon/items/613291e1d3c88d3ef12e

## 技術トピック

### MySQL とは？  

<details>
<summary>こちらを展開してご覧いただけます。</summary>

### [MySQL](https://dev.mysql.com/doc/refman/8.0/ja/what-is-mysql.html)

:::note info
MySQL は、オープンソースのリレーショナルデータベース管理システム (RDBMS) で、世界中で広く利用されているデータベースソフトウェアです。

|特徴|
|:--|
|MySQL は、高いパフォーマンス、拡張性、信頼性、および簡単な使用と管理性が特徴であり、Web アプリケーションや企業アプリケーションなど、さまざまな用途で使用されています。|
|MySQL は、クライアント/サーバーシステムとして動作し、多くのプログラムやWebアプリケーションから利用できます。|
|また、MySQL はオープンソースであるため、コミュニティによって開発されており、多くの開発者やユーザーが貢献しています。|
|MySQL は現在、Oracle Corporation が所有しており、Oracle Corporation から商用ライセンスも提供されています。|

:::

</details>

## 開発環境

+ Windows 11 Home 22H2 を使用しています。  

:::note info
[WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方も参考にして頂けます。  
:::

<details>

WSL (Microsoft Store アプリ版) [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
```

Ubuntu [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
```

</details>

:::note warn
この記事では基本的に **Ubuntu のターミナルで操作**を行います。**Vim を使用してコピペする方法**を初めて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。
:::

https://qiita.com/studio_meowtoon/items/7771ad48676926e41463

## MySQL のインストール

MySQL の存在を確認します。

```sh
$ mysql --version
-bash: /usr/bin/mysql: そのようなファイルやディレクトリはありません
```

インストールします。

```sh
$ mkdir ~/mysql57
$ cd ~/mysql57
$ wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-server_5.7.41-1ubuntu18.04_amd64.deb-bundle.tar
$ tar xvf mysql-server_5.7.41-1ubuntu18.04_amd64.deb-bundle.tar
$ sudo dpkg -i *.deb
$ sudo apt install -f
```

root パスワードの設定を行います。
※ この記事では password としました。

```
Enter root password:password
```

![input_password.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/0633de26-7be6-e920-bb22-22b3e6ebf9f8.png)

MySQL のバージョンを確認します。

```sh
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.41, for Linux (x86_64) using  EditLine wrapper
```

不要となったファイルを削除します。

```sh
$ cd ~
$ rm -fr ~/mysql57
```

:::note info
ここまでの手順で、**MySQL 5.7** を **Ubuntu 22.04** にインストールすることができました。
:::

### データベースとテーブルを作成

:::note info
ここでは例として **The Beatles** の**メンバー**を登録するデータベースを作成します。
:::

MySQL を起動します。

```sh
$ sudo service mysql start
```

MySQL にログインします。
※ この記事での password は password です。

```sh
$ mysql -u root -p
Enter password:
```

データベースを作成して選択します。

```sql
> CREATE DATABASE music;
> USE music;
```

テーブルを作成します。

```sql
> CREATE TABLE musician (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    birthdate DATE NOT NULL,
    instrument VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
);
```

データベースの一覧表示をします。

```sh
> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| music              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
```

テーブルを確認をします。

```sh
> SHOW TABLES;
+-----------------+
| Tables_in_music |
+-----------------+
| musician        |
+-----------------+
1 row in set (0.00 sec)
```

:::note warn
以下は、テーブルを**削除**するコマンドです。
:::

```sql
> DROP TABLE <table_name>;
```

:::note warn
以下は、データベースを**削除**するコマンドです。
:::

```sql
> DROP DATABASE <database_name>;
```

MySQL からログアウトします。

```sql
> exit;
Bye
```

:::note info
ここまでの手順で、MySQL に**データベース**と**テーブル**を**作成**することができました。
:::

### テーブルにデータを挿入

musician.sql を作成します。

```sh
$ cd ~/tmp
$ vim musician.sql
```

ファイルの内容

```sql:musician.sql
USE music;
INSERT INTO musician (id, name, birthdate, instrument) VALUES
  (1, 'John Lennon', '1940-10-09', 'Vocal, Guitar'),
  (2, 'Paul McCartney', '1942-06-18', 'Vocal, Bass'),
  (3, 'George Harrison', '1943-02-25', 'Vocal, Guitar'),
  (4, 'Ringo Starr', '1940-07-07', 'Vocal, Drums');
```

MySQL にログインします。
※ この記事での password は password です。

```sh
$ mysql -u root -p
Enter password:
```

データベースを選択します。

```sql
> USE music;
```

SQL ファイルをインポートします。

```sql
> SOURCE musician.sql;
```

テーブルの内容を表示します。

```sql
> SELECT * FROM musician;
+----+-----------------+------------+---------------+
| id | name            | birthdate  | instrument    |
+----+-----------------+------------+---------------+
|  1 | John Lennon     | 1940-10-09 | Vocal, Guitar |
|  2 | Paul McCartney  | 1942-06-18 | Vocal, Bass   |
|  3 | George Harrison | 1943-02-25 | Vocal, Guitar |
|  4 | Ringo Starr     | 1940-07-07 | Vocal, Drums  |
+----+-----------------+------------+---------------+
4 rows in set (0.00 sec)
```

MySQL からログアウトします。

```sql
> exit;
Bye
```

:::note info
ここまでの手順で、MySQL にテーブルに **SQL ファイル**からデータを**インポート**することができました。
:::

### データベースをダンプする

データベースのテーブルスキーマとデータをファイルにダンプします。

作業ディレクトリに移動します。
※ ~/tmp を作業ディレクトリとしています。

```sh
$ cd ~/tmp
```

データベースをダンプします。
※ この記事での password は password です。

```sql
$ mysqldump -u root -p music > music_dump.sql
Enter password:
```

ダンプされたファイルを確認します。

```sh
$ cat ~/tmp/music_dump.sql
```

<details>
<summary>ファイルの内容を確認します。</summary>

```sql:tmp/music_dump.sql
-- MySQL dump 10.13  Distrib 5.7.41, for Linux (x86_64)
--
-- Host: localhost    Database: music
-- ------------------------------------------------------
-- Server version       5.7.41

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `musician`
--

DROP TABLE IF EXISTS `musician`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `musician` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `birthdate` date NOT NULL,
  `instrument` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `musician`
--

LOCK TABLES `musician` WRITE;
/*!40000 ALTER TABLE `musician` DISABLE KEYS */;
INSERT INTO `musician` VALUES (1,'John Lennon','1940-10-09','Vocal, Guitar'),(2,'Paul McCartney','1942-06-18','Vocal, Bass'),(3,'George Harrison','1943-02-25','Vocal, Guitar'),(4,'Ringo Starr','1940-07-07','Vocal, Drums');
/*!40000 ALTER TABLE `musician` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2023-04-11 10:42:03
```

</details>

:::note info
ここまでの手順で、データベースのテーブルスキーマ、データを含む**内容**を **music_dump.sql** ファイルにダンプすることができました。
:::
:::note warn
このでの手順では、**music_dump.sql** ダンプファイルに **CREATE DATABASE music;** 文が**含まれない**ことに注意してください。
:::

### データベースをリストアする

データベースのテーブルスキーマとデータをファイルからリストアします。

:::note warn
この記事の例では、データベースを**一旦削除**しています。
:::

作業ディレクトリに移動します。
※ ~/tmp を作業ディレクトリとしています。

```sh
$ cd ~/tmp
```

MySQL にログインします。
※ この記事での password は password です。

```sh
$ mysql -u root -p
Enter password:
```

データベースを作成して選択します。

```sql
> CREATE DATABASE music;
> USE music;
```

データベースをリストアします。

```sql
> source music_dump.sql;
```

テーブルの内容を表示します。

```sql
> SELECT * FROM musician;
```

MySQL からログアウトします。

```sql
> exit;
Bye
```

:::note info
ここまでの手順で、データベースのテーブルスキーマ、データを含む **music_dump.sql** ダンプファイルを、**新しく作成**した **music** データベースにリストアすることができました。
:::

### アンインストール

MySQL を停止します。

```sh
$ sudo service mysql stop
```

MySQL パッケージを削除します。

```sh
$ sudo dpkg -P \
    mysql-client mysql-server \
    mysql-community-client mysql-community-server mysql-community-source
```

<はい> を選択します。
![delete.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/e2b12e48-d50a-8c73-2e7b-51b28588c13a.png)

さらに MySQL に関連するパッケージを完全に削除します。

```sh
$ sudo apt remove --purge mysql-common mysql-server mysql-client
$ sudo apt autoremove
```

MySQL の設定ファイルとデータベースを削除します。

```sh
$ sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
```

:::note info
ここまでの手順で、**MySQL 5.7** をシステムから完全に**アンインストール**することができます。
:::

## まとめ

Ubuntu 22.04 に MySQL 5.7 をインストールして、データベースを使用する開発環境を構築することが出来ました。

:::note warn
**Ubuntu** を使うと **Linux の知識**も身に付きます。最初は難しく感じるかもしれませんが、徐々に進めていけば自信を持って書けるようになります。
:::

どうでしたか？ MySQL の操作には、この他にもたくさんのコマンドがあります。みなさんも少しづつ試してみてください。今後も開発環境などを紹介していきますので、ぜひお楽しみにしてください。