0

このテーブルの目的は、複数の統計 (name列で指定) を分単位で収集することです。次に、名前で分数の合計 ( ) を時間数にロールアップし、時間数の合計 ( ) をロールアップする SQL を作成しました。日などに。

テーブル構造は次のとおりです。

CREATE TABLE IF NOT EXISTS `stats` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `time` varchar(19) NOT NULL,
  `name` varchar(16) NOT NULL,
  `value` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `time_name` (`time`,`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=32060002 ;

「show slave status」によって表示されるエラーの 1 つを次に示します。

Last_SQL_Error: Error 'Duplicate entry '32189722' for key 'PRIMARY'' on query. Default database: 'quip_mailer'. Query: 'replace into stats select NULL, date_format( execute_time, '%Y-%m-%d %H:%i' ), 'sent', count(*) as v from queue as q where execute_time > '2013-07-13 16:17:00' group by date_format( execute_time, '%Y-%m-%d %H:%i' ) order by date_format( execute_time, '%Y-%m-%d %H:%i' )'

エラーは主キーですが、渡された主キーは NULL です。

それでは、実際に「置換」を実行してデータを置換しないのはなぜでしょうか? 私には意味がありません。

スレーブでその正確な sql コマンドをコピーして貼り付けて実行すると、問題なく動作します。問題が発生するのは、レプリケーションからダウンしている場合のみです。

4

1 に答える 1

0

スレーブ サーバーにログオンし、その自動インクリメント値がマスターの現在の最大値以上であることを確認します。発生している可能性があるのは、自動インクリメント値が何らかの形でマスターとスレーブの間で同期されていないことです。スレーブの自動インクリメント値がわかったらALTER TABLE、マスターで自動インクリメント開始値をスレーブの自動インクリメント値よりも高い安全な数値に設定できます。

于 2013-07-14T00:47:33.177 に答える