Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Слетела master-master репилкация с ошибкой
Slave SQL thread initialized, starting replication in log 'adv-bin.000049' at position 245839360, relay log './1t-relay-bin.000145' position: 1291147
[ERROR] Slave SQL: Error 'Duplicate entry '131116165' for key 'PRIMARY'' on query.
запуситив mysqlbinlog --start-pos=1291147 ./1t-relay-bin.000145
я действительно накнулся на тот запрос который давай дубликат. Решенем было перескочить эту проблемную позицию. mysqlbinlog показал мне следующих шаг и я сделал stop slave; CHANGE MASTER TO RELAY_LOG_FILE='1t-relay-bin.000145', RELAY_LOG_POS=1291771;
мне выдало ошибку Failed initializing relay log position: Could not find target log during relay log initialization, но позиция перешла. то имеем в итоге.
Проблема с дубликатами ушла, НО....
show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: ооо
Master_User: api
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: adv-bin.000049
Read_Master_Log_Pos: 295943604
Relay_Log_File: 1t-relay-bin.000145
Relay_Log_Pos: 1291771
Relay_Master_Log_File: adv-bin.000049
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB: аааа
Replicate_Ignore_DB: mysql,test
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1593
Last_Error: Error initializing relay log position: Could not find target log during relay log initialization
Skip_Counter: 0
Exec_Master_Log_Pos: 245839360
Relay_Log_Space: 51396534
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1593
Last_SQL_Error: Error initializing relay log position: Could not find target log during relay log initialization
1 row in set (0.00 sec)
теперь
Relay_Log_File: 1t-relay-bin.000145
Relay_Log_Pos: 1291771
не изменяются, застыли, но
Master_Log_File: adv-bin.000049
Read_Master_Log_Pos: 295943604
бегут как сумашедшие.
Тоесть создается такое впечатление что репликация восстановилась, но то что не изменяются
Relay_Log_File: 1t-relay-bin.000145
Relay_Log_Pos: 1291771
меня сильно тревожит.
Что я вообще натоворил и как это исправить?
Неактивен
Ну, Вы неудачно выбрали положение в двоичном журнале. С помощью
mysqlbinlog найдите удачное положение (искать следует «#at …») и
переключите репликацию на него.
А вообще на будущее — есть отличная переменная, которая указывает,
сколько строк из репликации следует пропустить:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Сейчас не поможет, т.к. Вы уже сбили положение в relay log, так что
действуйте так, как написано в первом пункте
Неактивен
paulus написал:
так что
действуйте так, как написано в первом пункте
в первом пункте чего?
Отредактированно _Сергей (11.01.2010 14:33:24)
Неактивен
В первом пункте моего ответа. Т.е. «найти удачное положение и продолжить
репликацию с него».
Неактивен
paulus написал:
искать следует «#at …» и
именно это я и искал
# at 1291147----------> раньше стояло тут
#100111 10:15:42 server id 30 end_log_pos 245839432 Query thread_id=11966919 exec_time=0 error_code=0
SET TIMESTAMP=1263197742/*!*/;
SET @@s.pseudo_thread_id=11966919/*!*/;
SET @@s.foreign_key_checks=1, @@s.sql_auto_is_null=1, @@s.unique_checks=1, @@s.autocommit=1/*!*/;
SET @@s.sql_mode=0/*!*/;
SET @@s.auto_increment_increment=16, @@s.auto_increment_offset=5/*!*/;
/*!\C latin1 *//*!*/;
SET @@s.character_set_client=8,@@s.collation_connection=8,@@s.collation_server=33/*!*/;
SET @@s.lc_time_names=0/*!*/;
SET @@s.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 1291219
#100111 10:15:42 server id 30 end_log_pos 245839460 Intvar
SET INSERT_ID=131116165/*!*/;
# at 1291247
#100111 10:15:42 server id 30 end_log_pos 245839957 Query thread_id=11966919 exec_time=0 error_code=0
use api/*!*/;
SET TIMESTAMP=1263197742/*!*/;
INSERT INTO `s` (`hash`,`ip`,`host`,`site-id`,`user-id`,`cart-id`,`country-id`,`language-id`,`currency-id`,`create-time`,`modify-time`,`user-agent`) VALUES ('qlfcjinny09jf0jpih','1.2.19.14','www.r.com','-568954484',NULL,NULL,NULL,NULL,NULL,'2010-01-11 10:15:41','2010-01-11 10:15:41','Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) rBot BETA 1.2 (ffff)')
/*!*/;
# at 1291744
#100111 10:15:42 server id 30 end_log_pos 245839984 Xid = 305650529
COMMIT/*!*/;
---------------------> я перествил сюда# at 1291771
#100111 10:15:42 server id 30 end_log_pos 245840056 Query thread_id=11966919 exec_time=0 error_code=0
SET TIMESTAMP=1263197742/*!*/;
BEGIN
/*!*/;
# at 1291843
#100111 10:15:42 server id 30 end_log_pos 245840578 Query thread_id=11966919 exec_time=0 error_code=0
SET TIMESTAMP=1263197742/*!*/;
UPDATE `s` SET `id`='131116165',`hash`='qlfcjin9pny09jf0jpih',`ip`='1.2.19.14',`host`='www.r.com',`site-id`='-568954484',`user-id`='0',`cart-id`='0',`country-id`='250',`language-id`='1',`currency-id`='1',`create-time`='2010-01-11 10:15:41',`modify-time`='2010-01-11 10:15:41',`user-agent`='Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) rBot BETA 1.2 (ffff)' WHERE `id`='131116165'
/*!*/;
# at 1292365
#100111 10:15:42 server id 30 end_log_pos 245840605 Xid = 305650534
COMMIT/*!*/;
# at 1292392
#100111 10:15:42 server id 30 end_log_pos 245840677 Query thread_id=11966919 exec_time=0 error_code=0
SET TIMESTAMP=1263197742/*!*/;
BEGIN
/*!*/;
как понять что позиция правильная?
Отредактированно _Сергей (11.01.2010 14:34:08)
Неактивен
в relay-log.info позиция осталась старая 1291147
может там руками поправить?
Неактивен
а не надо запускать START SLAVE SQL_THREAD; ?
Неактивен
Попробуйте 1291843.
Теоретически, должно работать. Практически — Вы пытаетесь его поставить
на BEGIN, который не есть полноценная команда, может быть, не запускается
из-за этого.
Если не заработает — то, если на мастере еще бинлоги остались, то может спасти
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='adv-bin.000049', MASTER_LOG_POS=245839360;
START SLAVE;
Неактивен
на мастере все осталось.
1291843 пробовал - результат тот же.
После того как я перестартанул мускуль все вернулось к тому с чего началось.
опять ошибка Duplicate entry и все позиции стали такими как и были
может попробовать SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; раз уж все вернулось как и было?
Неактивен
на свой страх и риск сделал SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
вроде бы пошло!!!
но дождусь пока все изменения синхронизируются
Отредактированно _Сергей (11.01.2010 15:04:59)
Неактивен
Угу, теперь Вы пропустили одно событие, и всё бежит дальше. Не понятно,
почему RELAY_LOG не переключался. Ну да ладно, главное, что заработало
Неактивен