GA

2015/02/10

Docker時代にMySQLのserver-idを自動で振りたい

やってることはつまり昔から語られているアレです。

MySQLのserver-idの振り方 - blog.nomadscafe.jp

本番環境に突っ込むときはセットアップスクリプトがよしなにやってくれるようにしてあるんですが、DockerだとCMDでセットアップスクリプトを毎回流すの…? とかなってもんにょりしたのでmysqld_safeにパッチを書きました。結構前ですが。


Docker_image_for_MySQL_Fabric_aware/mysqld_safe.patch at master · yoku0825/Docker_image_for_MySQL_Fabric_aware

[mysqld_safe]セクションにauto-server-idを渡すと、IPアドレスの3バイト目と4バイト目からserver-idを計算してmysqldに渡してくれます。report-hostをくっつけるのは完全に単なる趣味ですが、report-hostはデフォルトでくっつけてくれてもいいんじゃないかなぁ。


このパッチを適用したmysqld_safeを使うと、


bash-4.1# ip a
592: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
593: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:42:ac:11:00:6b brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.107/16 scope global eth0

# bin/mysqld_safe --no-defaults --auto-server-id &
[1] 6
bash-4.1# 150210 13:19:48 mysqld_safe Logging to '/var/lib/mysql/b283bcd9b8b9.err'.
150210 13:19:48 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

bash-4.1# ps auxww | grep mysqld
root         6  0.0  0.1  11304  1472 ?        S    13:19   0:00 /bin/sh bin/mysqld_safe --no-defaults --auto-server-id
mysql       97 14.0 44.0 1127276 448972 ?      Sl   13:19   0:00 /usr/sbin/mysqld --no-defaults --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --server-id=107 --report-host=b283bcd9b8b9 --user=mysql --log-error=/var/lib/mysql/b283bcd9b8b9.err --pid-file=/var/lib/mysql/b283bcd9b8b9.pid
root       121  0.0  0.0   6380   648 ?        S+   13:19   0:00 grep mysqld

mysql> SELECT @@server_id;
+-------------+
| @@server_id |
+-------------+
|         107 |
+-------------+
1 row in set (0.00 sec)

こうなります。 DockerでMySQL Fabricをさっくり試すための整備をしたつもり のときに作ってたんですが、Oracleが公式にDocker HubにMySQLのイメージを作るとか言ってるので、ゆるい感じでFeature Requestを出してみました。便利なので。

MySQL Bugs: #75832: Add function to mysqld_safe for setting server-id automatically.


( ´-`).oO(FR出したあとに、思いっきりbash特有の書き方だったことに気付いた。。

0 件のコメント :

コメントを投稿