MySQLのレプリケーション形式 binlog_format について本気出して調べてみた

MySQLのレプリケーション設定をしている中でレプリケーション形式について学ぶ機会があったので記録しておきます。

MySQLのレプリケーション形式
参考 https://dev.mysql.com/doc/refman/5.6/ja/replication-formats.html

スポンサーリンク

MySQLのレプリケーション形式の確認

mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format';

MySQLのレプリケーション形式の種類

ステートメント(statement)

ステートメントベースのレプリケーション(SBR)

実行したSQLをログに書き込む

行(row)

行ベースのレプリケーション(RBR)

行ベースで変更した値をログに書き込む

混在(mixed)

ステートメントベースと行ベース混在のレプリケーション

どちらが良いか判断してログに書き込む

MySQLのレプリケーション形式の設定方法

mysql起動中に変更

ステートメント(statement)に変更する

SET GLOBAL binlog_format = 'statement';
または
SET GLOBAL binlog_format = 1;

行(row)に変更する

SET GLOBAL binlog_format = 'row';
または
SET GLOBAL binlog_format = 2;

混在(mixed)に変更する

SET GLOBAL binlog_format = 'mixed';
または
SET GLOBAL binlog_format = 3;

※再起動でmy.cnfの値に戻るので注意!my.cnfも直しておく事

my.cnf(再起動時反映)

ステートメント(statement)に変更する

binlog_format=statement
または
binlog_format=1

行(row)に変更する

binlog_format=row
または
binlog_format=2

混在(mixed)に変更する

binlog_format=mixed
または
binlog_format=3

ステートメントベースおよび行ベースレプリケーションのメリットとデメリット

参考 https://dev.mysql.com/doc/refman/5.6/ja/replication-sbr-rbr.html

ステートメントベースレプリケーションのメリット

SQLをログに書くのでログが少なくなる

ログが少なくなる為、容量・速度に影響

バックアップやリストア時にも影響

ステートメントベースレプリケーションのデメリット

環境によってずれる

行ベースレプリケーションのメリット

整合性の安心

行ベースレプリケーションのデメリット

SQLの結果を行ベースでログに書くのでログが多くなる

ログが多くなる為、容量・速度に影響

バックアップやリストア時にも影響

MySQLのレプリケーション形式のデフォルト

参考
http://download.nust.na/pub6/mysql/doc/refman/5.1/ja/replication-formats-setting.html
https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_format

バージョンによってデフォルト値が違うので注意!

  • MySQL5.1.11 まで STATEMENT
  • MySQL5.1.12 から MIXED
  • MySQL5.6 から STATEMENT
  • MySQL5.7.7 から ROW

何故こんなにコロコロ変わっているのか・・・
全パターン試してるやんかああああああああくぁwせdrftgyふじこ