【WSL2】Ubuntu20.04にてMySQL8.0が動かない問題を解決する

2020年6月10日Windows,環境構築

こんにちは、しきゆらです。

気が付いたらWSL2が正式対応になっていました。
いい時代になりましたね。
Linux環境のためにWindowsに仮想環境を立ち上げたり、高いMacに移行しなくても、お手軽に開発環境を整えることができるようになりました。

開発環境もWindows、面倒が少なくてよい。

さて、先日PCを組みなおしたためOSがまっさらになっていたので、改めてWSL2の環境構築を行いました。
そんな中で、MySQL8.0を使おうとしたときに詰まったので、その様子と解決までの流れをメモしておきます。
(組みなおしたPCについては、興味がないと思うので書きません)


WSLの有効化

WSLのインストール自体は、昔の手順のままなので過去の記事「【Win/WSL】Windowsで開発環境を整える」を参照してください。

上記にてWSLを有効にしていますが、これはWSL2ではありません。
WSL2に変更するためには、個別にごにょごにょしなければいけません。
大まかな手順としては下記の公式のクイックガイドを参考にすればOK。
Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs | https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

MySQLのインストール

この辺の話題は前にもメモなー、と思って振り返るとちょうど一年前にも書いてました。
大体この辺で躓く上に、毎回詰まる原因が違うの何とかならないんですかねぇ・・・。

さて、私は新しいものが好きで、個人であれこれさわるなら最新のものを使っていきたいと思っているので
ここではMySQL8.0をインストールしていきます。

大まかな手順としては、「【Rails】チュートリアルをきちんとやってみる 1」にある通りです。
しかし、執筆時現在(2020/06/10)にWindows Storeで公開されている「Ubuntu」は20.04のようで、そもそもMySQL5.xはインストールできないようでした。
リポジトリを見てみると、存在していないんですね。そういうものなのか。

リポジトリをダウンロードしてインストール。
普通にsudo apt install mysql-serverで入れるだけ。
面倒なバージョン指定が必要なくなったのはお手軽でよいですね。

では、MySQLを動かします。

systemctlを動かす

MySQLを自動起動したり、実行するためにはsudo systemctl start mysqlでよいようです。
CentOSさんでは使っていましたが、Ubuntuでは使えずにinit.dだったような気がしていたんですが変わったんですかね。

では、実行。
・・・動かない。
ログを見てみると、「D-Bus connection terminated.」と怒られていました。
調べていると同じように困っている人がいて、以下に解決策を残してくれていました。
WSL(CentOS7)でsystemctlを実行するとFailed to get D-Bus connection: Operation not permittedになる – Qiita | https://qiita.com/mzmiyabi/items/fec2c211e0325a5460a8

ひとまずsystemctlを動くようにしました。
では本題のMySQLです。

MySQLを動かす

sudo systemctl start mysql
・・・statusを見ると「Active: failed (failed)」、死んでいる・・・。

MySQLのエラーログを見てみると「Plugin mysqlx reported: 'Setup of socket: '/var/run/mysqld/mysqlx.sock’ failed, can’t create lock file /var/run/mysqld/mysqlx.sock.lock’」と怒られています。
ファイルが作成できない、とのことなので実際に上記パスを確認すると、なんとそもそもの「/var/run/mysqld」が存在していませんでした。
このパスの設定は、my.cnfで設定できるようですがひとまずデフォルトの状態で動くように対応することにします。

といっても、ただ単にパスを作成して権限を与えるだけ。

sudo mkdir /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld

パスを作成し、そのパスをMySQLがさわれるようにしておいたので行けるはずです。
sudo systemctl start mysql

・・・statusを見てみると「active」の文字が!
これにてMySQLが動くようになりました。

まとめ

今回は、WSL2にMySQL8.0をインストールし起動させるところまで詰まりながらなんとか到達しました。
以前、「【WSL2/MySQL】MySQL 8.X がserviceで立ち上がらない問題を解決する」という記事のように詰まったので、この手順を試してみるも
そもそもUbuntu20.04にはMySQL5.xが公開されておらず使えない、という悲しい状況でどうしろと・・・という感じでした。
しかし、ログを見たりすると問題としてはそこまで難しいことではなかったので対応することができました。

やはり、きちんとログを追うのは大事ですね。
最近、ログを見る機会がほぼないのですっぽ抜けていました・・・。

では、今回はここまで。
おわり

Posted by しきゆら