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