Добрый день, друзья.
Прошу по возможности подсказать по следующему вопросу.
Настроены два сервера под CentOS с mysql 5.6. Один мастер, другой соответственно slave. Настроена репликация для одной базы cat3, на сервере боевая база cat. Cat3 - аналог cat, но решили для тестирования начать не с боевой.
Конфиг для репликации с мастера:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 5
max_binlog_size = 500M
binlog_format = mixed
binlog_do_db = cat3
binlog-ignore-db=mysqlна slave сервере: server-id = 2.
В начале было все ок, прошло часов 12 и репликация свалилась с ошибкой странной:
Error 'Table 'cat.xml_logs_import_stats' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`='1388249''То есть с ошибкой, которая вообще не относится к реплицируемой базе cat3. Как такое может быть?
На master-сервере:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 47646 | cat3 | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)Делал на слейве:
set global SQL_SLAVE_SKIP_COUNTER = 1;
но не помогает, слейв больше не стартует.
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 47646
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 16279
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1146
Last_Error: Error 'Table 'cat.xml_logs_import_stats' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`='1388249''
Skip_Counter: 0
Exec_Master_Log_Pos: 19530
Relay_Log_Space: 46060
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: 1146
Last_SQL_Error: Error 'Table 'cat.xml_logs_import_stats' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`='1388249''
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 20f2b3c0-504d-11e4-93d3-e4115bdc4f84
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 150122 16:52:45
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.01 sec)
Главный мой вопрос как репликация свалилась запросом, которые не относится к базе, которая реплицируется.
Спасибо.
> Главный мой вопрос как репликация свалилась запросом, которые не относится к
> базе, которая реплицируется.
> Спасибо.если вы сделаете так:
use cat3;
DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`='1388249'То этот запрос упадет в бинлог, т.к. фильтрация производится по значению текущей БД соединения.
Добро пожаловать в волшебный мир MySQL репликации.
>> Главный мой вопрос как репликация свалилась запросом, которые не относится к
>> базе, которая реплицируется.
>> Спасибо.
> если вы сделаете так:
> use cat3;
> DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`='1388249'
> То этот запрос упадет в бинлог, т.к. фильтрация производится по значению текущей
> БД соединения.
> Добро пожаловать в волшебный мир MySQL репликации.Спасибо за ответ. Потестирую.
> Делал на слейве:
> set global SQL_SLAVE_SKIP_COUNTER = 1;
> но не помогает, слейв больше не стартует.Это чушь, вы в чем-то /сильно невнимательны/. Стартовать должен.
>> Делал на слейве:
>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>> но не помогает, слейв больше не стартует.
> Это чушь, вы в чем-то /сильно невнимательны/. Стартовать должен.Павел, скажите, пожалуйста, был ли у вас положительный опыт эксплуатации master-master на mysql? сложилось ли какое мнение об этом процессе?
>>> Делал на слейве:
>>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>>> но не помогает, слейв больше не стартует.
>> Это чушь, вы в чем-то /сильно невнимательны/. Стартовать должен.
> Павел, скажите, пожалуйста, был ли у вас положительный опыт эксплуатации master-master
> на mysql? сложилось ли какое мнение об этом процессе?Оно работает нормально, если программисты/проектировщики, написавшие приложение для этой схемы, были адекватны.
> Делал на слейве:
> set global SQL_SLAVE_SKIP_COUNTER = 1;
> но не помогает, слейв больше не стартует.
> mysql> show slave status\G;вообще то надо так
mysql> stop slave;
mysql> set global SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
>> Делал на слейве:
>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>> но не помогает, слейв больше не стартует.
>> mysql> show slave status\G;
> вообще то надо так
>
> mysql> stop slave;
> mysql> set global SQL_SLAVE_SKIP_COUNTER=1;
> mysql> start slave;
>Спасибо. Я в курсе, так и делал.
>[оверквотинг удален]
>>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>>> но не помогает, слейв больше не стартует.
>>> mysql> show slave status\G;
>> вообще то надо так
>>
>> mysql> stop slave;
>> mysql> set global SQL_SLAVE_SKIP_COUNTER=1;
>> mysql> start slave;
>>
> Спасибо. Я в курсе, так и делал.опять аналогичная ошибка выскочила, сделал необходимые команды, а эффекта ноль. Как в этом случае от ошибки избавиться?
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 5047
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1146
Last_Error: Error 'Table 'cat.schedule' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `cat`.`schedule` WHERE `id`='184407''
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 5864
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: 1146
Last_SQL_Error: Error 'Table 'cat.schedule' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `cat`.`schedule` WHERE `id`='184407''
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 20f2b3c0-504d-11e4-93d3-e4115bdc4f84
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 150123 15:59:15
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)ERROR:
No query specifiedmysql> stop slave;
Query OK, 0 rows affected (0.01 sec)mysql> set global SQL_SLAVE_SKIP_COUNTER = 1;
Query OK, 0 rows affected (0.00 sec)mysql> start slave;
Query OK, 0 rows affected (0.01 sec)mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 5047
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 553
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1146
Last_Error: Error 'Table 'cat.schedule' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `cat`.`schedule` WHERE `id`='184408''
Skip_Counter: 0
Exec_Master_Log_Pos: 390
Relay_Log_Space: 6201
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: 1146
Last_SQL_Error: Error 'Table 'cat.schedule' doesn't exist' on query. Default database: ''. Query: 'DELETE FROM `cat`.`schedule` WHERE `id`='184408''
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 20f2b3c0-504d-11e4-93d3-e4115bdc4f84
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 150123 16:07:50
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
> опять аналогичная ошибка выскочила, сделал необходимые команды, а эффекта ноль. Как в
> этом случае от ошибки избавиться?Всё также. Пропускать "неправильные" запросы по одному.
Надеюсь вы достаточно внимательны, чтобы увидеть, что падает на разных запросах?