MySQL構築

#はじめに
こちらではMySQLの構築について紹介させていただきます。
まぁどこにでもある普通の内容でQiita使ってる皆様には食傷気味かもしれませんが。なるべくわかりやすくを心掛けて書いていきたいと思います。



##環境
[VirtualBox](https://www.virtualbox.org/)
[Vagrant](https://www.vagrantup.com/)
[Cent0S7](https://www.centos.org/)

[こちらで構築の紹介をさせていただいてます参考にどうぞ](https://qiita.com/I_S-657/items/63528d09995138c9e46d)


##手順
###不要なものを削除（入っていれば）
まず最初にCentOS７にはMariaDBがデフォルトで入っているらしいのでそれを確認(残っていると競合してしまいインストールできないらしい)

```
$ yum list installed | grep maria
```

ある場合は削除します。

```
$ sudo yum remove -y mariadb-libs.x86_64
```
データディレクトリも削除（ある場合）

```
$ rm -rf /var/lib/mysql/
```

###MySQL導入

まずMySQLがあるかどうか調べます。

```
$ yum list | grep mysql       
akonadi-mysql.x86_64                        1.9.2-4.el7                base     
apr-util-mysql.x86_64                       1.5.2-6.el7                base     
dovecot-mysql.x86_64                        1:2.2.36-3.el7_7.1         updates  
freeradius-mysql.x86_64                     3.0.13-10.el7_6            base     
libdbi-dbd-mysql.x86_64                     0.8.3-16.el7               base     
mysql-connector-java.noarch                 1:5.1.25-3.el7             base     
mysql-connector-odbc.x86_64                 5.2.5-8.el7                base     
pcp-pmda-mysql.x86_64                       4.3.2-5.el7_7              updates  
php-mysql.x86_64                            5.4.16-46.1.el7_7          updates  
php-mysqlnd.x86_64                          5.4.16-46.1.el7_7          updates  
qt-mysql.i686                               1:4.8.7-3.el7_6            base     
qt-mysql.x86_64                             1:4.8.7-3.el7_6            base     
qt5-qtbase-mysql.i686                       5.9.7-2.el7                base     
qt5-qtbase-mysql.x86_64                     5.9.7-2.el7                base     
redland-mysql.x86_64                        1.0.16-6.el7               base     
rsyslog-mysql.x86_64                        8.24.0-41.el7_7.4          updates  
```

MySQLサーバをインストールしたいですがないようです。
CentOS7には公式のyumリポジトリにはないようなので公式からrpmファイルをインストールすることになります。

[SQL公式](https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html)からインストールのやり方を書いてくださっているのでそちらを参考に構築していきます。

```
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
```
正常にインストールできているか確認

```
$ yum repolist enabled | grep "mysql.*-community.*"
```
インストール

```
$ sudo yum install mysql-community-server
```

バージョンの確認

```
$ mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)
```

起動

```
$ sudo service mysqld start
```
起動確認

```
$ sudo service mysqld status
```

 active (running)
と表示されていたら起動されています。

###設定
この状態だとOS起動する度にSQLを起動しなおさないといけないので
自動起動するように設定します。

```
$ systemctl start mysqld
```

再起動して確認してみましょう。
起動していたら成功です。

続いてパスワードの設定
初期パスワードはmysqld.logのなかに書かれています。

確認

```
$ sudo cat /var/log/mysqld.log | grep root
2020-04-09T01:15:32.727302Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: [初期パスワード]
```
起動してログイン

```
$ mysql -u root -p
Enter password:[初期パスワードを入力]
```
パスワードの変更
方法はいくつかありますが[公式のセキュリティ改善](https://dev.mysql.com/doc/refman/8.0/en/mysql-secure-installation.html)で紹介されているのでこちらで紹介いたします

```
$ sudo mysql_secure_installation
```

最初にパスワードを聞かれるので初期パスワードを入力して新しいパスワードを入力してください

```
$ mysql -u root -p
Enter password:[新しく設定したパスワードを入力]
```

ログインできたら成功です。

###パスワードポリシー
新しいパスワードを設定する際にパスワードポリシーを知る必要があります。
こちらではMySQLに保存されているパスワードポリシーを確認してみましょう。

[公式](https://dev.mysql.com/doc/refman/8.0/en/validate-password-options-variables.html#sysvar_validate_password.policy)にやり方が載っているので参考に

```
mysql> SHOW VARIABLES LIKE 'validate_password.%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
```

参考程度に一例

```
mysql> set global validate_password.length=9; 
```

確認

```
mysql> SHOW VARIABLES LIKE 'validate_password.%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 9      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
```
変わったのがわかると思います。


試しに新しく作ってみましょう

```
mysql> create user 'user@localhost' identified by '<?lz*V6?';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
```

８文字でエラーが出ているのがわかると思います。

##まとめ
いかがだったでしょうか今回はCentOSでMySQLのインストールとパスワードの初期設定について紹介いたしました。
参考になれば幸いです。