tencent cloud

Data Transfer Service

Binlogパラメータチェック

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-16 17:47:30
AI翻訳

チェック詳細

ソースデータベースのbinlog関連パラメータは以下の要件に従って設定する必要があります。検証に合格しない場合は、本文の後続の手順を参照して修正してください。
log_bin変数はONに設定する必要があります。
binlog_format変数はROWに設定する必要があります。
binlog_row_imageをFULLに設定する必要があります。
ソースデータベースがMySQL 5.6以降のバージョンである場合、gtid_modeはONとOFFの設定のみサポートされます。gtid_modeをONに設定することをお勧めします。OFFに設定すると警告が表示され、ON_PERMISSIVEとOFF_PERMISSIVEに設定するとエラーが発生します。
server_idパラメータは手動で設定する必要があります。また、値を0に設定することはできません。
do_db、ignore_dbを設定することはできません。
ソースインスタンスがレプリカの場合、log_slave_updates変数をONに設定する必要があります。
ソースデータベースのBinlogログは少なくとも3日以上保持することをお勧めします。そうしないと、タスクの一時停止/中断時間がBinlogログの保持時間を超えた場合、タスクの再開ができなくなり、タスクが失敗する可能性があります。

修復方法

binlogを有効にする

log_binはbinlogのオン/オフを制御するパラメータです。binlogを有効にして、すべてのデータベーステーブル構造とテーブルデータの変更ログを記録する必要があります。
類似のエラーが発生した場合は、以下の手順を参照して修正してください:
1. ソースデータベースにログインします。
2. 以下の内容を参照して、ソースデータベースの設定ファイルmy.cnfを変更します。
log_binパラメータは変更後にデータベースを再起動して初めて有効になります。binlog_format、server_id、binlog_row_image、expire_logs_daysの各パラメータも検証段階でエラーが表示された場合は、これらをまとめて変更してからデータベースを再起動し、すべてのパラメータを有効にしてください。
説明
my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。
log_bin = MYSQL_BIN
binlog_format = ROW
server_id = 2 //1より大きい整数に設定することをお勧めします。ここでは例示のみです。
binlog_row_image = FULL
expire_logs_days = 3 //binlogの保持時間を変更します。3日以上に設定することをお勧めします。
3. 以下のコマンドを参照してソースデータベースを再起動します。
[$Mysql_Dir]/bin/mysqladmin -u root -p shutdown
[$Mysql_Dir]/bin/safe_mysqld &
説明
[$Mysql_Dir]はソースデータベースのインストールパスを指します。実際のソースデータベースのインストールディレクトリに置き換えてください。
4. binlog機能が有効になっているかどうかを確認します。
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)
5. 検証タスクを再実行します。

binlog_formatパラメータの変更

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のいずれかを選択します。
以上より、masterとslaveの正しいレプリケーションを保証するために、binlog_formatパラメータをROWに設定する必要があります。同様のエラーが発生した場合は、以下の手順を参照して修正してください。
説明
このパラメータの変更を有効にするには、データベース上のすべての接続をリセットする必要があります。ソースデータベースがスレーブの場合、マスタースレーブ同期SQLスレッドも再起動する必要があります。現在の業務接続が変更前のモードで書き込みを続けることを防ぎます。
1. ソースデータベースにログインします。
2. 以下のコマンドを参考にbinlog_formatを変更します。
set global binlog_format = ROW;
3. スレッドを再起動して設定を有効にし、その後、以下のコマンドでパラメータの変更が有効になったかどうかを確認します。
show variables like '%binlog_format%';
システムに表示される結果は以下の通りです:
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
4. 検証タスクを再実行します。

binlog_row_imageパラメータの変更

binlog_row_imageパラメータは、binlogがどのように前イメージ(変更前の内容を記録)と後イメージ(変更後の内容を記録)を記録するかを決定します。これはデータフラッシュバックやマスタースレーブレプリケーションなどの機能に直接影響します。 binlog_row_imageパラメータは、binlog_formatがROWモードに設定されている場合にのみ有効です。具体的な値の影響は以下の通りです:
FULL:ROWモードでは、binlogは前イメージと後イメージのすべての列のデータ情報を記録します。
MINIMAL:ROWモードでは、テーブルに主キーまたは一意キーがない場合、前イメージはすべての列を記録し、後イメージは変更された列を記録します。主キーまたは一意キーが存在する場合、前イメージと後イメージのどちらも、影響を受ける列のみを記録します。
以上より、binlog_row_imageをFULLに設定する必要があります。ソースデータベースのbinlogは全イメージを記録します。エラーが発生した場合は、以下の手順を参照して修正してください。
説明
このパラメータの変更を有効にするには、データベース上のすべての接続をリセットする必要があります。ソースデータベースがスレーブの場合、マスタースレーブ同期SQLスレッドも再起動する必要があります。現在の業務接続が変更前のモードで書き込みを続けることを防ぎます。
1. ソースデータベースにログインします。
2. 以下の内容を参考にbinlog_row_imageを変更します。
set global binlog_row_image = FULL;
3. スレッドを再起動して設定を有効にし、その後、以下のコマンドでパラメータの変更が有効になったかどうかを確認します。
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)
4. 検証タスクを再実行します。

gtid_modeパラメータの変更

GTID(Global Transaction Identifier、グローバルトランザクション識別子)は、binlog内でトランザクションを一意に識別するために使用されます。GTIDを使用することで、トランザクションの重複実行によるデータの不整合やマスタースレーブ間の不一致を回避できます。 GTIDはMySQL 5.6の新機能であるため、MySQL 5.6以降のバージョンにこの問題が存在します。DTSはgtid_modeの設定としてONとOFFのみをサポートしています。gtid_modeをONに設定することをお勧めします。設定しない場合、検証時に警告が表示されます。
警告は移行または同期タスクの進行に影響しませんが、業務に一定の影響を及ぼします:GTIDを設定した後、増分データ同期段階で、ソースインスタンスにHA切り替えが発生した場合、DTSサービスが切り替えて再接続し、タスクはほとんど感知しません。逆の場合、タスクは中断後に失敗し、復旧できません。
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トランザクションである必要があります。
類似の警告が発生した場合は、以下の手順に従って修正してください:
1. ソースデータベースにログインします。
2. マスタースレーブレプリケーション構成の両側でgtid_mode = OFF_PERMISSIVEを設定します。 MySQL 5.7.6より前のバージョンでは、my.cnf設定ファイルで変更してデータベースを再起動する必要があります。5.7.6以降のバージョンでは、グローバルコマンドで変更でき、データベースの再起動は不要ですが、すべての業務接続をリセットする必要があります。
set global gtid_mode = OFF_PERMISSIVE;
3. マスタースレーブレプリケーション構成の両側でgtid_mode = ON_PERMISSIVEを設定します。
set global gtid_mode = ON_PERMISSIVE;
4. 各インスタンスノードで以下のコマンドを実行し、匿名トランザクションが消費されたかどうかを確認します。パラメータ値が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)
5. マスタースレーブレプリケーション構成の両側でgtid_mode = ONを設定します。
set global gtid_mode = ON;
6. my.cnfファイルに以下の内容を追加し、その後データベースを再起動して初期値を有効にします。
説明
my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。
gtid_mode = on
enforce_gtid_consistency = on
7. 検証タスクを再実行します。

server_idパラメータの変更

server_idパラメータは手動で設定する必要があります。また、値を0に設定することはできません。このパラメータのシステムプリセット値は1です。クエリでこのパラメータが1と表示されても、必ずしも正しいとは限らないため、手動で設定する必要があります。
1. ソースデータベースにログインします。
2. 以下の内容を参考にserver_idを変更します。
set global server_id = 2; //1より大きい整数に設定することをお勧めします。ここでは例示のみです。
3. 以下のコマンドでパラメータの変更が有効になっているかどうかを確認します。
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)
4. 検証タスクを再実行します。

do_db、ignore_db設定の削除

binlogはデータベースで実行されたすべてのDDLおよびDMLステートメントを記録します。一方、do_db、ignore_dbはbinlog記録のフィルタリング条件を設定します。
binlog_do_db:指定されたデータベースのバイナリログのみを記録します。デフォルトではすべて記録します。
binlog_ignore_db:指定されたデータベースのバイナリログを記録しません。
do_db、ignore_dbを設定すると、一部のクロスデータベース操作でbinlogの記録が不完全になり、マスタースレーブレプリケーションに異常が発生する可能性があります。そのため、設定は推奨されません。同様のエラーが発生した場合は、以下の手順を参照して修正してください:
1. ソースデータベースにログインします。
2. ソースデータベースの設定ファイルmy.cnfを変更し、do_db、ignore_db関連の設定を削除します。
説明
my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。
3. 以下のコマンドを参照してソースデータベースを再起動します。
[$Mysql_Dir]/bin/mysqladmin -u root -p shutdown
[$Mysql_Dir]/bin/safe_mysqld &
説明
[$Mysql_Dir]はソースデータベースのインストールパスを指します。実際のソースデータベースのインストールディレクトリに置き換えてください。
4. パラメータの変更が有効になっているかどうかを確認します。
show master status;
システムに表示される結果は以下の通りです:
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000011 | 154 | | | |
+---------------+----------+--------------+------------------+-------------------+
5. 検証タスクを再実行します。

log_slave_updatesパラメータの変更

マスタースレーブ再利用構造では、レプリカでlog-binパラメータを有効にすると、レプリカ上で直接データを操作する場合、binlogに記録できます。しかし、レプリカがマスターからデータを複製する場合、binlogに記録できません。そのため、レプリカが他のレプリカのマスターとして機能する場合、log_slave_updatesパラメータを有効にする必要があります。
1. ソースデータベースにログインします。
2. ソースデータベースの設定ファイルmy.cnfに以下の内容を追加します。
説明
my.cnf設定ファイルのデフォルトパスは/etc/my.cnfです。現場の実際の状況に準じてください。
log_slave_updates = ON
3. 以下のコマンドを参照してソースデータベースを再起動します。
[$Mysql_Dir]/bin/mysqladmin -u root -p shutdown
[$Mysql_Dir]/bin/safe_mysqld &
説明
[$Mysql_Dir]はソースデータベースのインストールパスを指します。実際のソースデータベースのインストールディレクトリに置き換えてください。
4. 設定が有効になっているかどうかを確認します。
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)
5. 検証タスクを再実行します。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック