どのようなバイナリログ形式を使用していますか?ROWまたはSTATEMENTを使用していますか?あなたは、例えば実行すると
SELECT t.table_schema,t.table_name,engine
FROM information_schema.tables t
INNER JOIN information_schema .columns c
on t.table_schema=c.table_schema
and t.table_name=c.table_name
and t.table_schema not in ('performance_schema','information_schema','mysql')
GROUP BY t.table_schema,t.table_name
HAVING sum(if(column_key in ('PRI','UNI'), 1,0)) =0;
:
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
あなたはすべてのテーブルは主キーまたは一意キーを持っていることを確認してくださいbinlogのフォーマットとしてROWを使用している場合PKまたはユニークキーのないテーブル上の100万レコードを削除するためのマスタに対する1つのdeleteステートメントは、マスター側で1回のフルテーブルスキャンのみが行われますが、スレーブ側ではそうではありません。
ROW binlog_formatが使用されている場合、MySQLは行の変更をバイナリログに書き出します(STATEMENT binlog_formatのようなステートメントではありません)。その変更はスレーブ側のローごとに適用されます。スキャンはスレーブ側で行われ、マスタ側に1つのdelete文しか反映されず、スレーブ遅れの問題が発生しています。
ロックテーブルがありますか? –
私は – Ran
のことを知っていません。最終的には、マスターに更新や挿入などのクエリがたくさんある場合を除き、スレーブは追いつきます。あなたはサーバーから来ているたくさんの質問をしていますか? –