🐬

mysql-serverをgithubのソースコードからビルドする

2023/02/20に公開

mysql8.0をgithubのソースコードからビルドしてみます。

環境:
MacOS Monterey 12.6.1

cmakeはインストール済みとします。

基本的にはソースコードを取得して、インストール用のディレクトリを作成したら、公式の手順に則ってインストールするだけです。
https://dev.mysql.com/doc/refman/8.0/ja/installing-source-distribution.html

tl;dr

以下を実行する。

git clone --depth 1 --branch 8.0 git@github.com:mysql/mysql-server.git
cd mysql-server
mkdir -p build/boost
cd build
cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost
make -j8
mkdir data etc
echo -e "[mysqld]\nbasedir=$(pwd)\ndatadir=$(pwd)/data\n" >> etc/my.cnf
bin/mysqld --defaults-file=etc/my.cnf --initialize

インストール

1. git cloneする

リポジトリが大きすぎるのでブランチ指定してshallow cloneします。
forkしている場合はforkしている自分のリポジトリを指定してください。

$ git clone --depth 1 --branch 8.0 git@github.com:mysql/mysql-server.git

2. ビルド用のディレクトリ作成

mysql/mysql-server.gitignoreではリポジトリ直下のbuild/ディレクトリがignoreされているので、リポジトリ直下にbuildディレクトリを作って作業することが想定されています。
それにしたがって、今回は本体インストール用のディレクトリを build とし、boostインストール用のディレクトリを build/boost として作成します。

$ cd mysql-server
$ mkdir -p build/boost
$ cd build
$ cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost

cmake によって、 make 実行に必要なファイル群がbuildディレクトリ以下に展開されます。実行ファイルの実体は build/runtime_output_directory が作成され、そこへのシンボリックリンクとして build/bin が作成されています。

# 実行ファイル確認
$ ls -la
...
lrwxr-xr-x    1 user  staff       26  2 19 23:16 bin@ -> ./runtime_output_directory
...
drwxr-xr-x   72 user  staff     2304  2 20 23:16 runtime_output_directory/
...

3. インストール

buildディレクトリ内で make を実行します。普通にやると1時間ぐらいかかるのですが、-jオプションで並列化するとちょっと速くなるみたいです。

$ make -j8

これでmysqlの実行ファイル群のインストールが完了しました。実行ファイルの実体は build/runtime_output_directory に格納されています。

# 実行ファイルの実体
$ ls -la ./runtime_output_directory
...
-rwxr-xr-x   1 user  staff  75008392  2 19 23:54 mysqld*
...

実行する

1. buildディレクトリ配下に必要なディレクトリ群を作成

実際のデータディレクトリ data と、my.cnfを格納する etc ディレクトリを作成します。

$ mkdir data etc

2. my.cnfを用意

先ほど作成した data ディレクトリを my.cnf 内でdatadirとして指定します。

$ echo -e "[mysqld]\nbasedir=$(pwd)\ndatadir=$(pwd)/data\n" >> etc/my.cnf

3. データディレクトリ初期化

$ bin/mysqld --defaults-file=etc/my.cnf --initialize

temporary passwordが出力されます。

...
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: XXXXXXXXXX
...

4. 実行する

先ほど出力されたpasswordを利用して接続します。

# mysqld起動
$ bin/mysqld &
# 先のpasswordを入力して接続
$ bin/mysql -u root -p

初回なのでパスワードを変更するよう求められます。

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> SET PASSWORD = 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysqldを終了するには、mysqladminを利用します。先ほど変更したpasswordを使用します。

$ bin/mysqladmin -u root shutdown -p

以上でソースコードからビルドしたmysqlの起動、接続、終了が確認できました。

Tips

cmake時に利用できるオプションを確認する

$ cmake .. -L

もしくはMySQL ソース構成オプションを参照

インストールするストレージエンジンを追加する

デフォルトではInnoDB, MyISAM, MERGE, MEMORY, CSVエンジンがインストールされます。それ以外のものをインストールしたい場合、例えば、BLACKHOLEストレージエンジンを利用したい場合は、

$ cmake .. -DWITH_BLACKHOLE_STORAGE_ENGINE=1

といったオプションを追加します。

インストールをやり直したい場合

buildディレクトリを消して最初からやり直します。

参考

https://dev.mysql.com/doc/refman/8.0/ja/installing-source-distribution.html

https://dev.mysql.com/doc/refman/8.0/ja/postinstallation.html

https://labs.gree.jp/blog/2018/07/17099/

GitHubで編集を提案

Discussion