MySQLのバイナリログとレプリケーションとserver-idの関係

バイナリログに関して色々勉強しようと思い、まずは手元の環境(Mac)のbinlogを有効にして起動したところ以下のエラーが出た。

$ mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/ybalexdp.local.pid).

my.cnf

[mysqld]
log-bin=mysql-bin

原因調査と解決までのメモを書く。

環境

OS:Mac OS X 10.13.6
MySQL:5.7.17

server idが無い

エラー内容でググるとpidファイルを作成するとか、権限周りによる原因とか、最悪再インストールとか色々出てきたが、今回はmy.cnfの編集内容に起因しているので、ちょっと違った。

/usr/local/var/mysql/ybalexdp.local.errを確認すると下記のようなエラーログが確認できた。

[ERROR] You have enabled the binary log, but you haven't provided the mandatory server-id. Please refer to the proper server start-up parameters documentation

どうやらバイナリログを有効にする際に、server-idってのが必要でしかも必須らしいと。。

server-idを追記

試しにserver-idmy.cnfに追記してみる。

my.cnf

[mysqld]
log-bin=mysql-bin
server-id=1

で、起動すると立ち上がった。

server-idとは

複数のサーバ間でMySQLレプリケーションを行う場合、それぞれのサーバに対し、一意のIDを付与する必要があり、このserver-idにそのIDを指定する。
レプリケーションする際に必要なのはわかる。よぉくわかる。だがよぉ、、なんでバイナリログを有効にするだけなのに必須なんだ!  

レプリケーションとバイナリログ

このバイナリログ、レプリケーションで使われており、マスタが吐いたバイナリログをもとにスレーブ側で同じ状態に保ってる。
なのでレプリケーションをする際にはバイナリログの有効化が必須、かつserver-idも必要なためバイナリログ有効化にはserver-idも必須という構成なのか。
ただ、レプリケーションは組まず、でもポイントインタイムリカバリを実施したい、とかでも必須にしないといけない。
いや、普通レプリケーションくらい組むでしょ、っていうのはまぁその通りなんだろうけど。

まとめ

バイナリログを有効化にするにはserver-idは必須