MySQLのレプリケーション設定をしている中でレプリケーション形式について学ぶ機会があったので記録しておきます。
MySQLのレプリケーション形式
参考 https://dev.mysql.com/doc/refman/5.6/ja/replication-formats.html
見出し
MySQLのレプリケーション形式の確認
1 |
mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format'; |
MySQLのレプリケーション形式の種類
ステートメント(statement)
ステートメントベースのレプリケーション(SBR)
実行したSQLをログに書き込む
行(row)
行ベースのレプリケーション(RBR)
行ベースで変更した値をログに書き込む
混在(mixed)
ステートメントベースと行ベース混在のレプリケーション
どちらが良いか判断してログに書き込む
MySQLのレプリケーション形式の設定方法
mysql起動中に変更
ステートメント(statement)に変更する
1 2 3 |
SET GLOBAL binlog_format = 'statement'; または SET GLOBAL binlog_format = 1; |
行(row)に変更する
1 2 3 |
SET GLOBAL binlog_format = 'row'; または SET GLOBAL binlog_format = 2; |
混在(mixed)に変更する
1 2 3 |
SET GLOBAL binlog_format = 'mixed'; または SET GLOBAL binlog_format = 3; |
※再起動でmy.cnfの値に戻るので注意!my.cnfも直しておく事
my.cnf(再起動時反映)
ステートメント(statement)に変更する
1 2 3 |
binlog_format=statement または binlog_format=1 |
行(row)に変更する
1 2 3 |
binlog_format=row または binlog_format=2 |
混在(mixed)に変更する
1 2 3 |
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ふじこ