Hello,

Before I say anything, know that I decided to kick the caffeine habit this
week... :)

I am having some problems with replication that I have been unable to to
figure out.  Let me describe my systems.  They are identical PIII PowerEdge
350s with 512megs of RAM and two 60GB drives in a RAID-1 array.  I am
running Linux, kernel version 2.4.9 patched for EXT3.  MySQL 3.23.42 has
been configured and built with these options:

CFLAGS="-O3 -march=i686 -mcpu=i686" CXX=gcc CXXFLAGS="-O3 -march=i686
-mcpu=i686 -felide-constructors -fno-exceptions -fno-rtti" ./configure
--prefix=/home/mysql --enable-assembler --with-mysqld-ldflags=-all-static
--with-innodb --without-docs --without-bench --with-gnu-ld

I am using gcc-2.95.3, glibc-2.4.4 and binutils-2.11.2.  As you may have
guessed, we are using InnoDB tables.

When initially setting up the environment, I had a mysqldump produced
dataset (from our old environment) that I used to load each of the MySQL
servers (sv1 and sv2).  At that point, I enabled the slave and turned on
the application (my company refinances auto loans; we have written a
workflow system that handles the loan applications that come in).  I had
tested this setup in a "lab" environment, and as expected, everything
worked fine.  After about a day of running, sv2, the slave, died with this
error:

-----

ERROR: 1062  Duplicate entry '1063030' for
key 1
010917 13:30:13  Slave:  error running query 'replace into APPV_APP_VAR
                                        (
                                                APPV_APPL_ID,
                                                APPV_PROP_NAME,
                                                APPV_PROP_VALUE,
                                                APPV_CREATE_DT
                                        )
                                values
                                        (
                                                7706,
                                                'TradeInValue',
                                                '9625',
                                                '2001-09-17 13:28:58'
                                        )' 

-----

This is an auto-incremented table, so "key 1" with a value of "1073030"
does exist.  The funny thing about this is that this statement, because it
is a "replace into" statement, should work.  The application runs fine on
the primary machine, and ran fine for months on another server (without
replication).

I know for sure that nothing besides the master is touching the slave.

After the first failure, I attempted to resync the databases using the
following commands:

-----

sv1> mysql: flush tables with read lock;
sv2> sh: mysqldump --all --opt --host=xxx --user=xxx -p database > database.dump
sv1> mysql: reset master;
sv1> mysql: reset slave;
sv1> mysql: unlock tables;
sv2> sh: mysql -u xxx -p database < database.dump
sv2> mysql: reset master;
sv2> mysql: reset slave;
sv2> mysql: slave start;

-----

Once again, after about a day, the slave failed with the following error:

-----

ERROR: 1062  Duplicate entry '1063030' for key 1
010918 12:19:58  Slave:  error running query 'replace into APPV_APP_VAR
                                        (
                                                APPV_APPL_ID,
                                                APPV_PROP_NAME,
                                                APPV_PROP_VALUE,
                                                APPV_CREATE_DT
                                        )
                                values
                                        (
                                                7706,
                                                'TradeInValue',
                                                '9625',
                                                '2001-09-17 13:28:58'
                                        )' 

-----

At this point I thought that maybe I should try another method of syncing
things up.  So I shut down the application and the databases and pysically
copied the InnoDB data and log files from sv1 to sv2.  And again, failure:

-----

ERROR: 1062  Duplicate entry '1122600' for key 1
010920 15:10:28  Slave:  error running query 'replace into APPV_APP_VAR
                                        (
                                                APPV_APPL_ID,
                                                APPV_PROP_NAME,
                                                APPV_PROP_VALUE,
                                                APPV_CREATE_DT
                                        )
                                values
                                        (
                                                8163,
                                                'TitleModelYear',
                                                '1998',
                                                '2001-09-20 10:08:58'
                                        )' 

-----

Oh, the my.cnf files:

----- SV1

[mysqld]
set-variable    = key_buffer=32M
set-variable    = max_allowed_packet=1M
set-variable    = table_cache=256
set-variable    = sort_buffer=4M
set-variable    = record_buffer=1M
set-variable    = thread_cache=8
set-variable    = thread_concurrency=2

log-bin
server-id = 1

innodb_data_file_path = df1:1024M;df2:1024M
innodb_data_home_dir = /home/mysql/DB/data
set-variable = innodb_mirrored_log_groups=1
innodb_log_group_home_dir = /home/mysql/DB/logs
set-variable = innodb_log_files_in_group=3
set-variable = innodb_log_file_size=256M
set-variable = innodb_log_buffer_size=32M
innodb_flush_log_at_trx_commit=1
innodb_log_arch_dir = /home/mysql/DB/logs
innodb_log_archive=0
set-variable = innodb_buffer_pool_size=192M
set-variable = innodb_additional_mem_pool_size=32M
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50

-----

----- SV2

[mysqld]
set-variable    = key_buffer=32M
set-variable    = max_allowed_packet=1M
set-variable    = table_cache=256
set-variable    = sort_buffer=4M
set-variable    = record_buffer=1M
set-variable    = thread_cache=8
set-variable    = thread_concurrency=2

log-bin
log-slave-updates
skip-slave-start
server-id = 2

master-host = d1p-A
master-user = repl
master-password = xxxxx 
master-port = 3306
replicate-ignore-db=mysql

innodb_data_file_path = df1:1024M;df2:1024M
innodb_data_home_dir = /home/mysql/DB/data
set-variable = innodb_mirrored_log_groups=1
innodb_log_group_home_dir = /home/mysql/DB/logs
set-variable = innodb_log_files_in_group=3
set-variable = innodb_log_file_size=256M
set-variable = innodb_log_buffer_size=32M
innodb_flush_log_at_trx_commit=1
innodb_log_arch_dir = /home/mysql/DB/logs
innodb_log_archive=0
set-variable = innodb_buffer_pool_size=192M
set-variable = innodb_additional_mem_pool_size=32M
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50

-----

Yes, SV2 is also replicated to a third machine, SV3.  However, this has no
been enabled for the second and third failures.

One more note.  I thought that maybe InnoDB was having replication issues
with the "replace into" statement, so I "ALTER TABLE"ed the APPV table on
the slave machine to a MyISAM table and let it run again (that is, reloaded
the copied InnoDB files, ALTERed the table, reset the master/slave logs on
the slave, and started the slave again).  It failed in the same place as
before, which I guess is a good thing.

Well, I'm not sure what I am going to try next.  I will likely change the
"replace into" statement into a "delete-insert" and see if that doesn't get
things going.  Obviously that is not the most desirable thing, because it
would seem that this should work.

Thanks,

robert

-- 
robert cope         \ I'm like a bad penny.  I always turn up.
[EMAIL PROTECTED] / 
                    \ 

---------------------------------------------------------------------
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