ERROR 1062 (23000): Duplicate entry "12345" for key 1

ERROR 1062 (23000): Duplicate entry "12345" for key 1

am 21.06.2006 15:53:42 von Jens Puruckherr

Hallo,

eine Slave, der über binlog repliziert wird, meldet in unregelmässigen
Abständen im regulären Betrieb den obigen Fehler.
Leider fällt es schwer, die entsprechenden Queries oder Tabellen zu
finden, bei denen der Fehler auftritt.
Die Applikation dahinter ist stark frequentiert und enthält relativ
viele Tabellen.

Gibt es eine Möglichkeit das Loglevel hochzuschrauben um im mysqld.err -
Log mehr Infos zu erhalten?

Welche Möglichkeiten gibt es noch, dem Fehler auf die Spur zu kommen?


Jens

Re: ERROR 1062 (23000): Duplicate entry "12345" for key 1

am 22.06.2006 14:56:16 von Axel Schwenke

Jens Puruckherr wrote:

> eine Slave, der über binlog repliziert wird, meldet in unregelmässigen
> Abständen im regulären Betrieb den obigen Fehler.

Dein Slave und dein Master unterscheiden sich offensichtlich. Wenn du
den Eintrag im Errorlog mal im ganzen liest, kannst du sehen, welches
SQL-Statement (vermutlich ein INSERT) auf dem Slave schiefgeht (weils
da ein UNIQUE constraint verletzt).

Was jetzt die angemessene Reaktion ist, kannst du nur selber
entscheiden. Mögliche Reaktionen wären:

1. Die Applikation vom Netz nehmen, letzten korrekten Zustand vom
Backup wieder herstellen.

2. Den Slave sauber neu klonen (natürlich auch vom Backup).

3. Den Datensatz auf dem Slave löschen und die Replikation wieder
starten. Hoffen, daß das die einzige Inkonsistenz war und jetzt
(oder nach ein paar weiteren Iterationen) wieder alles gut ist.

4. Den Fehler ignorieren. Das Statement auf dem Slave skippen.

5. Duplicate key Fehler auf dem Slave prinzipiell ignorieren.

> Leider fällt es schwer, die entsprechenden Queries oder Tabellen zu
> finden, bei denen der Fehler auftritt.

Das Errorlog enthält alle notwendigen Informationen.


XL

Re: ERROR 1062 (23000): Duplicate entry "12345" for key 1

am 26.06.2006 09:06:23 von Jens Puruckherr

Axel Schwenke wrote:
> Jens Puruckherr wrote:
>
>> eine Slave, der über binlog repliziert wird, meldet in unregelmässigen
>> Abständen im regulären Betrieb den obigen Fehler.
>
> Dein Slave und dein Master unterscheiden sich offensichtlich. Wenn du
> den Eintrag im Errorlog mal im ganzen liest, kannst du sehen, welches
> SQL-Statement (vermutlich ein INSERT) auf dem Slave schiefgeht (weils
> da ein UNIQUE constraint verletzt).


060524 1:48:51 Slave SQL thread initialized, starting replication in
log 'db_shop_sl1-bin.001' at position 339078038, relay log
'./localhost-relay-bin.001' position: 339078084
060524 1:48:51 Slave I/O thread: connected to master
'xxxxx@111.222.333.555:3306', replication started in log
'db_shop_sl1-bin.001' at position 339078038
060524 2:12:35 Slave SQL thread initialized, starting replication in
log 'FIRST' at position 0, relay log './localhost-relay-bin.001' position: 4
/usr/sbin/mysqld: Warten auf Verbindungen Gentoo Linux mysql-4.0.22
060524 2:12:35 Slave I/O thread: connected to master
'xxxxx@111.222.333.444:3306', replication started in log 'FIRST' at
position 4
ERROR: 1062 Doppelter Eintrag '332657' fr Schlssel 1.
ERROR: 1062 Doppelter Eintrag '675575' fr Schlssel 1.
ERROR: 1062 Doppelter Eintrag '332675' fr Schlssel 1.
ERROR: 1062 Doppelter Eintrag '675593' fr Schlssel 1.
ERROR: 1062 Doppelter Eintrag '332681' fr Schlssel 1.
[... ein paar hundert solcher Meldungenb ... ]


>> Leider fällt es schwer, die entsprechenden Queries oder Tabellen zu
>> finden, bei denen der Fehler auftritt.
>
> Das Errorlog enthält alle notwendigen Informationen.

naja...dann würd ich nicht fragen.


Jens

Re: ERROR 1062 (23000): Duplicate entry "12345" for key 1

am 26.06.2006 14:34:39 von Axel Schwenke

Jens Puruckherr wrote:
> Axel Schwenke wrote:
>> Jens Puruckherr wrote:
>>
>>> eine Slave, der über binlog repliziert wird, meldet in unregelmässigen
>>> Abständen im regulären Betrieb den obigen Fehler.
>>
>> Dein Slave und dein Master unterscheiden sich offensichtlich. Wenn du
>> den Eintrag im Errorlog mal im ganzen liest, kannst du sehen, welches
>> SQL-Statement (vermutlich ein INSERT) auf dem Slave schiefgeht (weils
>> da ein UNIQUE constraint verletzt).
>
> 060524 1:48:51 Slave SQL thread initialized, starting replication in
> log 'db_shop_sl1-bin.001' at position 339078038, relay log
> './localhost-relay-bin.001' position: 339078084
> 060524 1:48:51 Slave I/O thread: connected to master
> 'xxxxx@111.222.333.555:3306', replication started in log
> 'db_shop_sl1-bin.001' at position 339078038
> 060524 2:12:35 Slave SQL thread initialized, starting replication in
> log 'FIRST' at position 0, relay log './localhost-relay-bin.001' position: 4
> /usr/sbin/mysqld: Warten auf Verbindungen Gentoo Linux mysql-4.0.22
> 060524 2:12:35 Slave I/O thread: connected to master
> 'xxxxx@111.222.333.444:3306', replication started in log 'FIRST' at
> position 4
> ERROR: 1062 Doppelter Eintrag '332657' fr Schlssel 1.
> ERROR: 1062 Doppelter Eintrag '675575' fr Schlssel 1.
> ERROR: 1062 Doppelter Eintrag '332675' fr Schlssel 1.
> ERROR: 1062 Doppelter Eintrag '675593' fr Schlssel 1.
> ERROR: 1062 Doppelter Eintrag '332681' fr Schlssel 1.
> [... ein paar hundert solcher Meldungenb ... ]

Welche MySQL-Version soll das sein? Und wieso sind da deutsche Fehler-
meldungen drin? Als ich das letzte mal Replikations-Fehlermeldungen
gesehen habe, standen da die Query und die Binlog-Position mit drin.
Hast du irgendwelche speziellen Optionen bzgl. Replikation in my.cnf?

Falls da slave-skip-errors mit drin vorkommt (um Error 1062 zu
ignorieren) könnte das die Erklärung sein. Mach das weg, dann bekommst
du wenigstens die Position im Log, wo das inkriminierte Statement
steht.


XL