MySQL 5.7 server-idの自動割当

ConoHa VPSに構築したMySQL ですが、レプリケーションで必要な各サーバ一意のserver-idを自動で割り当てるようにしたいと思ってました。

スクリプトでもいいですが、もっとスッキリした方法ないかなと検索したところMySQLで有名なあのお方のブログに良い方法がありました。

 

mysqld_safeでIPアドレスからserver-idを計算して、mysqldに渡すというものです。server-idは1から2^32-1の整数(1~4,294,967,295)なのでIPv4で全桁で算出すれば被らないです。

実際の設定はmy.cnfのmysqld_safeセクションにauto-server-idを設定しておき

# vi /etc/my.cnf

[mysqld_safe]
auto-server-id

mysqld_safeを以下のように修正します。

 

mysqld_safeで計算したserver-idの値を--server-id=valueでmysqldに渡しますが、IPアドレスの第1〜4オクテット全て使った計算は以下のような感じになります。

# ip -f inet -o addr show eth0 | awk '{print $4}' | awk -F/ '{print $1}' | awk -F. '{id=$1*(2**24)+$2*(2**16)+$3*(2**8)+$4 ; print id}'

確認はMySQLのプロセスでmysqldに--server-id=*****が付与されていることを確認する。

# ps aux | grep mysql | grep -v grep

またはコマンドで確認します。

# mysql -uroot -p -e "SELECT @@server_id;"