log_bin変数はONに設定する必要があります。binlog_format変数はROWに設定する必要があります。binlog_row_imageをFULLに設定する必要があります。gtid_modeはONとOFFの設定のみサポートされます。gtid_modeをONに設定することをお勧めします。OFFに設定すると警告が表示され、ON_PERMISSIVEとOFF_PERMISSIVEに設定するとエラーが発生します。server_idパラメータは手動で設定する必要があります。また、値を0に設定することはできません。do_db、ignore_dbを設定することはできません。log_slave_updates変数をONに設定する必要があります。log_binはbinlogのオン/オフを制御するパラメータです。binlogを有効にして、すべてのデータベーステーブル構造とテーブルデータの変更ログを記録する必要があります。 my.cnfを変更します。my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。log_bin = MYSQL_BINbinlog_format = ROWserver_id = 2 //1より大きい整数に設定することをお勧めします。ここでは例示のみです。binlog_row_image = FULLexpire_logs_days = 3 //binlogの保持時間を変更します。3日以上に設定することをお勧めします。
[$Mysql_Dir]/bin/mysqladmin -u root -p shutdown[$Mysql_Dir]/bin/safe_mysqld &
show variables like '%log_bin%';
mysql> show variables like '%log_bin%';+------------------+-------+| Variable_name | Value |+------------------+-------+| log_bin | ON |+------------------+-------+| binlog_format | ROW |+------------------+-------+| binlog_row_image | FULL |+------------------+-------+1 row in set (0.00 sec)
binlog_formatはbinlogの記録モードであり、以下の3種類があります:STATEMENT:データを変更する各SQLはmasterのbinlogに記録されます。slaveはレプリケーション時に、元のmaster側と同じSQLを実行します。このモードはbinlogのログ量を削減できますが、特定の関数をレプリケーションする場合、slave側で正しくレプリケーションできません。ROW:binlogログには、各行のデータ変更の形式で記録されます。その後、slave側で同じデータに対して変更が行われます。このモードはmasterとslaveの正しいレプリケーションを保証しますが、binlogのログ量は増加します。MIXED:前の2つのモードを組み合わせたものです。MySQLは実行される各SQL文に応じて記録するログ形式を区別し、STATEMENTとROWのいずれかを選択します。binlog_formatパラメータをROWに設定する必要があります。同様のエラーが発生した場合は、以下の手順を参照して修正してください。binlog_formatを変更します。set global binlog_format = ROW;
show variables like '%binlog_format%';
mysql> show variables like '%binlog_format%';+---------------+-------+| Variable_name | Value |+---------------+-------+| binlog_format | ROW |+---------------+-------+1 row in set (0.00 sec)
binlog_row_imageパラメータは、binlogがどのように前イメージ(変更前の内容を記録)と後イメージ(変更後の内容を記録)を記録するかを決定します。これはデータフラッシュバックやマスタースレーブレプリケーションなどの機能に直接影響します。
binlog_row_imageパラメータは、binlog_formatがROWモードに設定されている場合にのみ有効です。具体的な値の影響は以下の通りです:FULL:ROWモードでは、binlogは前イメージと後イメージのすべての列のデータ情報を記録します。MINIMAL:ROWモードでは、テーブルに主キーまたは一意キーがない場合、前イメージはすべての列を記録し、後イメージは変更された列を記録します。主キーまたは一意キーが存在する場合、前イメージと後イメージのどちらも、影響を受ける列のみを記録します。binlog_row_imageをFULLに設定する必要があります。ソースデータベースのbinlogは全イメージを記録します。エラーが発生した場合は、以下の手順を参照して修正してください。binlog_row_imageを変更します。set global binlog_row_image = FULL;
show variables like '%binlog_row_image%';
mysql> show variables like '%binlog_row_image%';+------------------+-------+| Variable_name | Value |+------------------+-------+| binlog_row_image | FULL |+------------------+-------+1 row in set (0.00 sec)
gtid_modeの設定としてONとOFFのみをサポートしています。gtid_modeをONに設定することをお勧めします。設定しない場合、検証時に警告が表示されます。gtid_modeの値は以下の通りです。gtid_modeの値を変更する際は、以下の4つの値から段階的にのみ変更できます。例えば、OFFからONに変更する必要がある場合、gtid_modeの変更順序はOFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ONとなります。OFF:マスターデータベースのすべての新規トランザクションおよびスレーブデータベースのトランザクションは、匿名トランザクションである必要があります。OFF_PERMISSIVE:マスターデータベースで新しく開始されたトランザクションは匿名トランザクションです。ただし、スレーブデータベースのトランザクションは匿名またはGTIDトランザクションであることが許可されますが、GTIDモードのみであることは許可されません。ON_PERMISSIVE:マスターデータベースで新しく開始されたトランザクションはGTIDトランザクションです。スレーブデータベースのトランザクションは匿名またはGTIDトランザクションであることが許可されます。ON:マスターデータベースで新しく開始されたトランザクションはGTIDトランザクションです。スレーブデータベースのトランザクションもGTIDトランザクションである必要があります。gtid_mode = OFF_PERMISSIVEを設定します。
MySQL 5.7.6より前のバージョンでは、my.cnf設定ファイルで変更してデータベースを再起動する必要があります。5.7.6以降のバージョンでは、グローバルコマンドで変更でき、データベースの再起動は不要ですが、すべての業務接続をリセットする必要があります。set global gtid_mode = OFF_PERMISSIVE;
gtid_mode = ON_PERMISSIVEを設定します。set global gtid_mode = ON_PERMISSIVE;
0の場合は消費完了を表します。show variables like '%ONGOING_ANONYMOUS_TRANSACTION_COUNT%';
mysql> show variables like '%ONGOING_ANONYMOUS_TRANSACTION_COUNT%';+-------------------------------------+-------+| Variable_name | Value |+-------------------------------------+-------+| Ongoing_anonymous_transaction_count | 0 |+-------------------------------------+-------+1 row in set (0.00 sec)
gtid_mode = ONを設定します。set global gtid_mode = ON;
my.cnfファイルに以下の内容を追加し、その後データベースを再起動して初期値を有効にします。my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。gtid_mode = onenforce_gtid_consistency = on
server_idパラメータは手動で設定する必要があります。また、値を0に設定することはできません。このパラメータのシステムプリセット値は1です。クエリでこのパラメータが1と表示されても、必ずしも正しいとは限らないため、手動で設定する必要があります。server_idを変更します。set global server_id = 2; //1より大きい整数に設定することをお勧めします。ここでは例示のみです。
show global variables like '%server_id%';
mysql> show global variables like '%server_id%';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id | 2 |+---------------+-------+1 row in set (0.00 sec)
binlog_do_db:指定されたデータベースのバイナリログのみを記録します。デフォルトではすべて記録します。binlog_ignore_db:指定されたデータベースのバイナリログを記録しません。my.cnfを変更し、do_db、ignore_db関連の設定を削除します。my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。[$Mysql_Dir]/bin/mysqladmin -u root -p shutdown[$Mysql_Dir]/bin/safe_mysqld &
show master status;
mysql> show master status;+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000011 | 154 | | | |+---------------+----------+--------------+------------------+-------------------+
log-binパラメータを有効にすると、レプリカ上で直接データを操作する場合、binlogに記録できます。しかし、レプリカがマスターからデータを複製する場合、binlogに記録できません。そのため、レプリカが他のレプリカのマスターとして機能する場合、log_slave_updatesパラメータを有効にする必要があります。 my.cnfに以下の内容を追加します。my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。log_slave_updates = ON
[$Mysql_Dir]/bin/mysqladmin -u root -p shutdown[$Mysql_Dir]/bin/safe_mysqld &
show variables like '%log_slave_updates%';
mysql> show variables like '%log_slave_updates%';+-------------------+-------+| Variable_name | Value |+-------------------+-------+| log_slave_updates | ON |+-------------------+-------+1 row in set (0.00 sec)
フィードバック