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パスが生成されるらしい

ソースはここのサイト

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

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

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

WSL Ubuntu 18.04 に MySQL 5.7 をインストールする
を参考にやってみる

サーバー起動
$ 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
なにも出ないのでうまくいったんでしょう

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

rootパスワードを変更する

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

あとはいろいろ聞かれる
よくわからないので、このサイトを参考にした
MySQL 5.7 をインストールしたら最初に行うセットアップ

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

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っていうユーザは消しちゃダメ
ubuntuさんが勝手につくったユーザーぽい。

エラーを解決する

Debian mysql再起動時にAccess denied for user 'debian-sys-maint'
を参考にやってみる

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関係の備忘録

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サーバを動かす

最後に

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

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


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