>Description:

>From the MySQL on-line manual (Section 7.22):

REPLACE works exactly like INSERT, except that if an old record in the table 
has the same value as a new record on a unique index, the old record is 
deleted before the new record is inserted.

>From the MySQL on-line manual (F.2.3 Changes in release 3.23.34):

REPLACE will not replace a row that conflicts with an auto_increment generated key.

Table Structure
===============

The following table exists in a replicated environment. The problem described
below occurs only during replication on the slave. There are no problems at
all on the master.

mysql> describe ResumeRabbit_Status.status;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| ID          | int(11)      |      | PRI | NULL    | auto_increment |
| OID         | int(11)      |      |     | 0       |                |
| SiteCode    | varchar(4)   |      | MUL |         |                |
| Status      | char(1)      |      |     | Q       |                |
| Time        | int(11)      |      |     | 0       |                |
| LastFailed  | int(11)      |      |     | 0       |                |
| CompletedAt | int(11)      |      |     | 0       |                |
| Username    | varchar(255) |      |     |         |                |
| Password    | varchar(8)   |      |     |         |                |
+-------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)

mysql> show index from ResumeRabbit_Status.status;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| Table  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | 
|Cardinality | Sub_part | Packed | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| status |          0 | PRIMARY  |            1 | ID          | A         |      
|130516 |     NULL | NULL   |         |
| status |          0 | SiteCode |            1 | SiteCode    | A         |         
|115 |     NULL | NULL   |         |
| status |          0 | SiteCode |            2 | OID         | A         |      
|130516 |     NULL | NULL   |         |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
3 rows in set (0.00 sec)

mysql>

Problem
=======
After upgrading to 3.23.34, I started getting the following errors on the slave:

mysql> show slave status;
+----------------------+-------------+-------------+---------------+-------------+------+---------------+---------------------+---------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------+--------------+
| Master_Host          | Master_User | Master_Port | Connect_retry | Log_File    | Pos 
| | Slave_Running | Replicate_do_db     | Replicate_ignore_db | Last_errno | 
|Last_error                                                                            
|                                                    | Skip_counter |
+----------------------+-------------+-------------+---------------+-------------+------+---------------+---------------------+---------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------+--------------+
| www.resumerabbit.com | replicator  | 3001        | 60            | ds1-bin.087 | 
|8332 | No            | ResumeRabbit_Status |                     | 1062       | error 
|'Duplicate entry '197086' for key 1' on query 'REPLACE INTO status 
|(OID,SiteCode,Time,Status) VALUES ('6048','AJ','985059892','P')' | 0            |
+----------------------+-------------+-------------+---------------+-------------+------+---------------+---------------------+---------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------+--------------+
1 row in set (0.00 sec)

mysql>

After reviewing the change log for 3.23.34, it appears that this is the new documented 
behaviour.  However, when I use the REPLACE command on the master (to alter the data 
that will get replicated) or from the command line tool on the slave it works in
the previously defined manner (that is it deletes the existing record and inserts
a new one complete with a new auto_increment ID).

>How-To-Repeat:
        Uncertain

>Fix:
        Work-around: Replace the REPLACE INTO sql statement with the appropriate 
        DELETE and INSERT INTO statements

>Submitter-Id:  <submitter ID>
>Originator:    root
>Organization:
 
>MySQL support: none
>Synopsis:      REPLACE not behaving as documented
>Severity:      serious
>Priority:      high
>Category:      mysql
>Class:         sw-bug
>Release:       mysql-3.23.34 (Source distribution)
>Server: /usr/local/bin/mysqladmin  Ver 8.17 Distrib 3.23.34, for pc-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          3.23.34-log
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /tmp/mysql.sock
Uptime:                 6 days 7 hours 45 min 37 sec

Threads: 254  Questions: 259462  Slow queries: 5  Opens: 42  Flush tables: 1  Open 
tables: 19 Queries per second avg: 0.475
>Environment:
        
System: Linux www 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686 unknown
Architecture: i686

Some paths:  /usr/bin/perl /usr/bin/make /usr/bin/gmake /usr/bin/gcc /usr/bin/cc
GCC: Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
Compilation info: CC='gcc'  CFLAGS=''  CXX='c++'  CXXFLAGS=''  LDFLAGS=''
LIBC: 
lrwxrwxrwx    1 root     root           13 May 12  2000 /lib/libc.so.6 -> libc-2.1.3.so
-rwxr-xr-x    1 root     root      4101324 Feb 29  2000 /lib/libc-2.1.3.so
-rw-r--r--    1 root     root     20272704 Feb 29  2000 /usr/lib/libc.a
-rw-r--r--    1 root     root          178 Feb 29  2000 /usr/lib/libc.so
Configure command: ./configure  --with-lipwrap --with-charset=latin1 --without-debug 
--with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
Perl: This is perl, version 5.005_03 built for i386-linux

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to