【WSL2/MySQL】MySQL 8.X がserviceで立ち上がらない問題を解決する
こんにちは、しきゆらです。
Railsと戯れ始めたわけですが、MySQLを動かすために結構時間がかかってしまいました。
serviceで自動起動する方法がわからず、毎回service mysql startとして起動しています。
さて、今回はserviceコマンドを使ってMySQLを立ち上げようとしたときにおこった問題と解決方法をメモしておきます。
問題
起こったこととしては、serviceコマンドを使ってMySQLを立ち上げると、failとなってしまい起動しないというもの。
定期的にバージョンアップ等を行っているので、ほかに入っているものが悪いとかいろいろ考えられますが、ひとまずエラーログを見てみました。
[bash]
Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.
[/bash]
AIOインタフェースというものがサポートされていない、というエラーが出ていました。
AIOとは???
調べてみると、非同期IOのことらしい。
Linuxの細かいことは全くわからないのですが、調べたものをまとめると
「IOはディスク読み書きは時間がかかるので、同期的では待ち時間が問題になる。これを非同期に行うことで処理を進めるのがAIO」という感じでしょうか。
参考:https://www.oreilly.co.jp/community/blog/2010/09/buffer-cache-and-aio-part3.html
WSL2はAIOをサポートしていない・・・?
ということを確認すべくググってみましたが、よくわかりませんでした。
ここからは、エラー内容でググってみました。
解決方法
エラー内容でググってみると、同様なエラーで困っている方がいました。
WSLのGithubリポジトリでissueが上がっていました。
該当issue:https://github.com/Microsoft/WSL/issues/3631
以下、issueに記されていた回避方法をメモしておきます。
大まかな手順としては、以下の通り。
- MySQL8.Xを削除
- MySQL5.Xを使うようにリポジトリの設定を変更
- MySQL5.Xをインストール
- リポジトリの設定を8.Xに変更
- update/upgrade
- MySQLのinitファイルの修正
- 起動!
では、具体的にコマンドを見ていきます。
MySQL8.Xの削除
すでにインストールされているMySQL8.Xを削除します。
設定等もろとも削除したいので、以下のコマンドで削除します。
[bash]
sudo apt purge mysql-server mysql-client
sudo apt -y autoremove
[/bash]
MySQL自体の削除と、関連するパッケージの削除を行います。
MySQL5.Xを使うようにリポジトリの設定変更
MySQLのバージョンを8.Xではなく5.Xを使うように変更します。
[bash]
sudo dpkg-reconfigure mysql-apt-config
[/bash]
画面に従って変更します。
詳しい設定方法は、前回の記事にあるのでそちらを参照してください。
参考:【Rails】チュートリアルをきちんとやってみる 1
MySQL5.Xのインストール
こちらは、普通にaptでインストールします。
[bash]
sudo apt install mysql-server mysql-client
[/bash]
インストール時にバージョンを確認しましょう。
併せて、5.Xが動くことを確認しましょう。
[bash]
sudo service mysql start
[/bash]
8.Xを使うように変更する + update/upgrade
先ほど、8.Xから5.Xに変更したのと同様に、5.Xから8.Xを使うように変更しなおします。
ついでに、updateしておきます。
[bash]
sudo apt update
sudo apt upgrade
[/bash]
MySQLから見れば、v5.Xからv8.Xへのアップグレードなので、再インストールせずにupgradeで行けます。
initファイルの修正
「/etc/init.d/mysql」のファイル内容を変更します。
ファイル内にある「. /usr/share/mysql/mysql-helpers」を「. /usr/share/mysql-8.0/mysql-helpers」に変更します。
これにて、作業は完了です。
起動確認しましょう。
起動確認
serviceコマンドで起動してみます。
[bash]
sudo service mysql start
[/bash]
OKと出れば起動完了です。
まとめ
WSL2環境でMySQL8.Xが起動しない問題を回避しました。
今回は、日本語で情報がなくても英語のリソースをあさってみると意外と解決方法があるということがわかりました。
Githubはコードも読めるし、エラー等の情報もまとまっているので困ったときには覗いてみるとよさそうです。
今回は、ここまで。
おわり