How to build MySQL 8.0.25 on Mac (and Debug with Visual Studio Code)

こんにちわ。せじまです。今回はちょうゆるふわです。

はじめに

How to build MySQL 8.0.11 on Mac (and Debug with Visual Studio Code) を公開したころ、 macOSはHigh Sierraでしたが、2021年5月現在、最新のmacOSはBig Sur(11.3.1)となりました。私が私物のMacBook Pro 16inchで試している限り、Big Surは久々の大型アップデートなのもあってか、まだ用途によっては stable じゃないのでは?という印象があります。

先日、私物のMacを11.3.1にあげてから Xcode を最新版にアップデートしようとしたら、何度やっても kernel panic が発生するので、Xcodeをアンインストールし、Command line tools for Xcodeだけ入れるなどして、ようやく 8.0.25 がビルドできました。

私の記憶が確かならば、少なくとも、 MySQL 5.7 に関しては、 5.7.33 以降は Big Sur でビルドにコケるような気がしてるんですが、原因が特定できたらそのうちまたバグレポートしようかなぁと思うなどしています。

まぁそういう感じで、時期によって MySQL のビルドに失敗したり何かの問題に出くわしたりするというのは、しばしば発生しえます。Macに限った話ではなく、「Windowsでビルドに失敗しますぞ」的なバグレポートを、私は過去に何度か上げたことがありました。

ちなみに、いずれも最新のMySQL8.0では修正されています。

あと、2021年5月の時点では、 -DDOWNLOAD_BOOST オプションが機能しません。

まぁ、ビルドに限らず不具合見つかったら、バグレポートして、みんなで改善していけば良いですよね。MySQL は OSS なんですから。

How to build MySQL 8.0.25 on macOS Big Sur(11.3.1)

とりあえず今回は Big Sur で試しました。

余談ですが、私はMySQLビルドしたいので、Macは Intel Mac 使い続けてるんですが、そろそろ M1 Mac でもビルドしてデバッガで動かせるようになっているんでしょうか。 M1 Mac お持ちの方でどなたか試された方がいらっしゃるなら、 blog に書いていただくか、ご連絡いただけますと幸甚です。

Homebrew のインストール

Homebrewのインストールについては公式サイトを参照してください。

MySQL 8.0 Reference Manual の 2.9.2 Source Installation Prerequisites

とあります。8.0.11をビルドした頃、公式ドキュメントには

と書いてあったので、特定のバージョンのMySQLは、特定のバージョンのXcodeじゃないとビルドできないとかありそうな気がしますねー。

(ここ数ヶ月Homebrewの新規インストールはしてないですが)Homebrew がインストールされる過程で Xcode Command Line Tools がインストールされるでしょうから、clangのインストールはそれで良しとします。

openssl のインストール

Windowsのときはいろいろ悩まされましたが、Macでは何も難しいことはなく

します。

CMake のインストール

https://cmake.org/download/ からダウンロードしてもよいのですが、

で最新の cmake インストールしても 8.0.25 はビルドできましたので、 Homebrew に頼ってしまって良い気がします。

MySQL 8.0 GA のソースコードをダウンロード

https://dev.mysql.com/downloads/mysql/

からMySQL Community Server 8.0 GAの最新版の Generic Linux (Architecture Independent), Compressed TAR Archive
Includes Boost Headers をダウンロードします。現時点で最新は mysql-boost-8.0.25.tar.gz です。

今回はとりあえず

/Users/${USER}/src

配下でビルドするとして、ターミナルで

としておきます。

CMake

ターミナルで

します。 メモリ32GB以上あるなら、スワップ使うかもしれませんが

しても完走すると思います。

MySQL 8.0 の新しいバージョンがリリースされるたびに、私は私物の MacBook Pro 16inch で cmake 叩いた後、風呂に入る前に make -j で放置してます。

Visual Studio Code のダウンロード

あとは https://code.visualstudio.com/ から Mac 版の Visual Studio Code をダウンロードして、Visual Studio Code で ~/src/mysql-8.0.25 を開いていただけば良いでしょう。

Visual Studio Code でデバッグ

デバッグまで試してみましょう。

datadir の初期化

rootのパスワードは、初期化時のログに出力されます。初期化が終わったら

でログインできることを確認し、SET PASSWORDで適当なパスワードに変更するなどして、SHUTDOWNしておきましょう。

c_cpp_properties.json, launch.json

私は Mac においては最小限の設定として、次のようにしています。

Mac では includePath に OpenSSL のパスを追加しています。 brew upgrade して openssl のバージョンが変わるとここのパスが変わるので、ここ意識する必要があるのは少々残念な気もしています。

あとはメニューの Run -> Start Debugging で普通にデバッグできます。ここまで来ると、 Mac だろうと WSL2 だろうと、いずれの環境でも Visual Studio Code 使う分には、同じような感覚でデバッグできると思います。

おわりに

今回は Mac 上で MySQL8.0.25をデバッグビルドして Visual Studio Code でソースコード読める環境を整えつつ、 Visual Studio Code 経由でデバッグもできそうだってところまで確認してみました。

つい最近までは、Mac で Visual Studio Code 使ってデバッガで追いかけると、ちょっとした挙動を調べるときは大変便利だったのですが、さいきんは WSL2 上でも gdb で MySQL 8.0 のデバッグできそうな気がしてるので、必ずしもMacじゃなくていいかなぁという気はしています。

ただ、 M1 Mac でも MySQL 8.0 をデバッグビルドしてデバッガで動かせるようになったなら、 Apple Silicon だとどれくらい快適に動かせるか、どれくらい速くビルドが完走するか関心があります。

また、経験上、 Mac も Windows も、時期によっては最新のMySQLのビルドにコケる場合があったりするので、一つの環境に固執せず、いつでもMySQLをデバッグできる環境を用意しておきたいなと思う次第であります。

ついでに言いますと、個人的に、 Tiger Lake はナカナカ高性能で久しぶりに良い x86 だと感じているので、 Tiger Lake の Chromebook がこなれた価格で買えるようになってきたら、また Chromebook で MySQL をビルドするようになるかもしれません。