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
の編集内容に起因しているので、ちょっと違った。
MySQL起動できなくなった The server quit without updating PID file - Qiita
「ERROR! The server quit without updating PID file」となり、MacOSでmysqlにアクセスできない。 - Qiita
/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-id
をmy.cnf
に追記してみる。
my.cnf
[mysqld] log-bin=mysql-bin server-id=1
で、起動すると立ち上がった。
server-idとは
複数のサーバ間でMySQLのレプリケーションを行う場合、それぞれのサーバに対し、一意のIDを付与する必要があり、このserver-idにそのIDを指定する。
レプリケーションする際に必要なのはわかる。よぉくわかる。だがよぉ、、なんでバイナリログを有効にするだけなのに必須なんだ!
レプリケーションとバイナリログ
このバイナリログ、レプリケーションで使われており、マスタが吐いたバイナリログをもとにスレーブ側で同じ状態に保ってる。
なのでレプリケーションをする際にはバイナリログの有効化が必須、かつserver-idも必要なためバイナリログ有効化にはserver-idも必須という構成なのか。
ただ、レプリケーションは組まず、でもポイントインタイムリカバリを実施したい、とかでも必須にしないといけない。
いや、普通レプリケーションくらい組むでしょ、っていうのはまぁその通りなんだろうけど。
まとめ
バイナリログを有効化にするにはserver-idは必須