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;"