WSLのUbuntu18.04.1LTSにMySQL5.7を入れたお話

# はじめに

サーバーサイドについて詳しくないのですが、強制的にやらざるおえなくなったので、メモ程度に残しときます。
(めっちゃ躓いた)

※詳しくないので、「～ぽい」という表現が多いです。

# 環境

* Windows10 home
* ubuntu18.04.1LTS
* MySQL 5.7

# やったこと

###まずダウンロード

``$ sudo apt install mysql-server mysql-client ``

mysql-serverだけでもいいぽい

### MySQL5.7の場合、初期rootパスが生成されるらしい

ソースはここの[サイト](https://weblabo.oscasierra.net/mysql-57-init-setup/)

``/var/log/mysqld.log``に書いてあるらしいけど、存在しない。

### 初期パスワードを生成する

存在しないので、生成するしかない。
``mysqld --initialize``を行うとroot初期パスワードが生成されるらしい(参考サイトの場所忘れた…)

[WSL Ubuntu 18.04 に MySQL 5.7 をインストールする](https://loumo.jp/wp/archive/20181005120019/)
を参考にやってみる

サーバー起動
``$ sudo service mysql start``

```
* Starting MySQL database server mysqld
No directory, logging in with HOME=/
```
ホームディレクトリーないといわれるけど、serverは起動した
エラーはいったん放置

初期化
``$ sudo mysqld --initialize``

```
--initialize specified but the data directory has files in it. Aborting.
```
とエラーが出たのでサイト通り
``sudo rm -rf /var/lib/mysql/``
と削除。もともとディレクトリがあるとダメぽい

もう一回初期化
``$ sudo mysqld --initialize``
なにも出ないのでうまくいったんでしょう:relaxed:

初期ルートパスを所得
``$ grep 'temporary password'  /var/log/mysql/error.log``
このパスワードを使って、rootパスワードを変更していく

### rootパスワードを変更する

パスワードを変更するには、mysql_secure_installation コマンドを実行する
個人開発レベルならしなくてもいいらしいけど、これをやるのが正しいぽい
``$ sudo mysql_secure_installation``
を実行、ルートパスワードが聞かれたり、聞かれなかったりするけど、
聞かれたら今さっきの``temporary password``を入力する

あとはいろいろ聞かれる
よくわからないので、このサイトを参考にした
[MySQL 5.7 をインストールしたら最初に行うセットアップ](https://weblabo.oscasierra.net/mysql-57-init-setup/)

これで自分で設定したルートパスでログインできる。

### MySQLにログインする

``$ sudo mysql -u root -p``
``mysql_secure_installation``で指定したパスワードを入力

無事入れたら、本当にrootで入ってるか確認する

```
mysql> status
Connection id:          20
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 21 min 1 sec
 
Threads: 1  Questions: 15  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.011
--------------

```

rootで入れたので``quit``してmysqlから出る

### MySQLを停止させる

`` sudo service mysql stop ``
なぜか停止できない…

`` sudo service mysql status ``

```
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
```
debian-sys-maintユーザーが拒否されてるぽい
ていうか、debian-sys-maintって誰だよ

ということで、調べてみた。
[[MySQL]debian-sys-maintっていうユーザは消しちゃダメ](http://c-limber.blogspot.com/2013/12/mysqldebian-sys-maint.html)
ubuntuさんが勝手につくったユーザーぽい。

### エラーを解決する
[Debian mysql再起動時にAccess denied for user 'debian-sys-maint'](https://fujishinko.exblog.jp/9334055/)
を参考にやってみる

debian-sys-maintさんのパスワードがわかりにくいので書き換える
vimしか使えないのでvimで書き換える。
``$vim  /etc/mysql/debian.cnf``

```
[client]
host = localhost
user = debian-sys-maint
password = [ここを好きなパスワードに書き換える]
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user = debian-sys-maint
password = [ココを好きなパスワードに書き換える]
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
```

またmysqlに入る
``$ sudo mysql -u root -p``

debian-sys-maintさんに権限を与える。
``> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '[指定したパスワード]' WITH GRANT OPTION;``
GRANTについては[Mysql関係の備忘録](https://qiita.com/ritukiii/items/afdc91e68d0cf3e0f383)

で``quit``
してからの
``sudo service mysql stop``
停止できた！！
大変！！

### mysqlのホームディレクトリを指定してあげる
```
* Starting MySQL database server mysqld
No directory, logging in with HOME=/
```
のエラーを解決する

``sudo usermod -d /var/lib/mysql mysql``
を実行

でこのエラーは出なくなるはず。

サーバー停止してから実行しないとエラーがでる


# 参考資料
[【Ubuntu 18.04 LTS Server】MySQLサーバを動かす](https://www.yokoweb.net/2018/05/13/ubuntu-18_04-server-mysql/)

# 最後に

MySQL5.7、はじめていじってみたのですがバージョンアップしてセキュリティ面が強くなったせいか初期設定で躓く人が多いらしいです。

私の場合、よくわかってないので調べるのが大変でした:weary:

---
追記
結局、動作が不安定だったので、windowsのMysqlを入れました。