mysql-serverをgithubのソースコードからビルドする
mysql8.0をgithubのソースコードからビルドしてみます。
環境:
MacOS Monterey 12.6.1
cmake
はインストール済みとします。
基本的にはソースコードを取得して、インストール用のディレクトリを作成したら、公式の手順に則ってインストールするだけです。
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
ディレクトリを消して最初からやり直します。
参考
Discussion