forum.bitel.ru
http://forum.bitel.ru/

Репликация, формат бинарных логов
http://forum.bitel.ru/viewtopic.php?f=22&t=8767
Страница 1 из 1

Автор:  abu [ 12 дек 2013, 07:43 ]
Заголовок сообщения:  Репликация, формат бинарных логов

Настроена репликация, версия mysql 5.1.56
Столкнулся вот с такими предупреждениями (которые валятся из-за спамеров в больших количествах) в логах:

Код:
131210 16:58:46 [Warning] Statement may not be safe to log in statement format. Statement: UPDATE inet_auth_error_1_201312 SET lastTime='2013-12-10 16:58:46', count=count+1, logCoordinateRecordId=1238688 WHERE lastTime>'2013-12-10 15:58:46' AND lastTime<'2013-12-10 17:08:46' AND deviceId=27 AND contractId=0 AND servId=0 AND code=1 AND hash=-1775415046 AND servTitle='LOGIN:pppoe-242761' LIMIT 1


которое, как я понимаю, связано с форматом бинарного лога: https://dev.mysql.com/doc/refman/5.1/en ... limit.html , который у меня выставлен по умолчанию в STATEMENT. Была ли у кого-нибудь такая проблема и какие есть пути решения (варнинги в логе, как самый "простой" вариант, я отключил, но делать этого на постоянной основе не хочется)?

Автор:  Phricker [ 12 дек 2013, 11:30 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

Код:
binlog-format = mixed

Автор:  abu [ 12 дек 2013, 17:34 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

Спасибо.

А само переключение на mixed требует каких-то дополнительных телодвижений, кроме указания в конфиге?

Автор:  Phricker [ 12 дек 2013, 18:43 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

Нет

Автор:  abu [ 13 дек 2013, 14:04 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

В моем случае и для моих рук - не совсем (:

Поменял в обеих конфигурациях серверов на mixed, перезагрузил последовательно master и slave, выхватил на slave:

Код:
Could not execute Update_rows event on table bgbilling.inet_auth_error_1_201312; Can't find record in 'inet_auth_error_1_201312', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log bin.002837, end_log_pos 19021435


поскипал несколько штук таких ошибок, скипаются, но их оказывается достаточно много. Перезалил суточный бэкап на slave, перестроил slave, ошибка не ушла. Прописал в конфиге mySQL:

slave-skip-errors = 1032

дождался, пока slave не начал работать со следующим логом (bin.002838) отключил скипание ошибки 1032. Насколько все правильно сделал - судить не возьмусь, но пока так.

Теперь остается только проверить cheksum таблиц на обоих серверах.

Автор:  skyb [ 13 дек 2013, 15:47 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

Да кажись проще всего занов реплику перенастроить, я так понимаю бд пока не большая

Автор:  abu [ 13 дек 2013, 19:42 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

Можно и перенастроить. Ошибочные записи в итоге не пропали, и повторяются в количестве 11 штук примерно раз в 10 минут. Мб, подождать, когда создастся таблица inet_auth_error_1_201401 - для следующего месяца?

Автор:  philyuchkoff [ 14 дек 2013, 09:42 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

Немного оффтоп: я в конфиг прописал
Код:
slave-skip-errors = 1062, 1063
.
Какие последствия могут быть при пропуске ошибок репликации?
Мне кажется, что каждая пропущенная ошибка добавляет разницу между базой на мастере и слейве, чем больше пропущенных ошибок - тем различнее базы?
Или это не так?

Автор:  abu [ 14 дек 2013, 17:47 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

Да, строки из бинлогов с такими ошибками в реплику не попадут. В моем случае не попадают (пока?) строки UPDATE в таблицу, в которой записываются ошибки при авторизации, но могут и другие не попадать. Об этом появляются записи в логах mysql. Но лучше, как мне кажется, чтобы попадало все и без ошибок (:

Автор:  ok-2004 [ 15 дек 2013, 11:46 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

2 abu:
У Вас почти мой случай: viewtopic.php?f=19&t=7853#p71616.
Phricker и skyb Вам правильно сказали - тока перестройка всей репликации поможет.
Мой Вам совет ( заметил что у Вас мускуль 5.1 ) - запаситесь большим винтом и поставьте формат бинлога сразу RAW.

Mixed формат - по терминологии Cisco - "last resort route"("путь отчаяния"). Чтоб слейв не так сильно отставал ,как при statement-based репликации; но и чтобы relay-log на слейве не разбухал слишком, как при raw-based.
Но тип каждой операции с базой мастеру приходиться вначале определить - "опасная" ли она,прежде чем записать её в бинлог в том или ином формате.
Для базы какого-нибудь интернет-магазина это наверное не критично, для базы БЖБ, где запись в базу идёт практически в реалтайм - миксед может оказаться ещё медленнее чем raw.

Автор:  abu [ 23 дек 2013, 06:38 ]
Заголовок сообщения:  Re: Репликация, формат бинарных логов

С помощью mysqlbinlog нашел на master'е запрос, который вызывает ошибку в slave, им оказался некритичный UPDATE одной из записей в таблице bgbilling.inet_auth_error_1_201312.

Было:
Код:
mysql> select * from inet_auth_error_1_201312 where id = 1;
+----+----------+---------------+------------+---------------+--------+------------+---------------------+------+-------+---------------------+-----------------------+
| id | deviceId | deviceTitle   | contractId | contractTitle | servId | hash       | servTitle           | code | count | lastTime            | logCoordinateRecordId |
+----+----------+---------------+------------+---------------+--------+------------+---------------------+------+-------+---------------------+-----------------------+
|  1 |       27 | pppoe.******* |          0 |               |      0 | 1707666857 | LOGIN:dsl********** |    1 |     1 | 2013-12-01 00:00:06 |                     3 |
+----+----------+---------------+------------+---------------+--------+------------+---------------------+------+-------+---------------------+-----------------------+
1 row in set (0.00 sec)

исправил, добавив значения из последнего неуспешного UPDATE'a:
Код:
mysql> select * from inet_auth_error_1_201312 where id = 1;
+----+----------+---------------+------------+---------------+--------+------------+---------------------+------+--------+---------------------+-----------------------+
| id | deviceId | deviceTitle   | contractId | contractTitle | servId | hash       | servTitle           | code | count  | lastTime            | logCoordinateRecordId |
+----+----------+---------------+------------+---------------+--------+------------+---------------------+------+--------+---------------------+-----------------------+
|  1 |       27 | pppoe.******* |          0 |               |      0 | 1707666857 | LOGIN:dsl********** |    1 | 742410 | 2013-12-23 10:04:10 |               1472070 |
+----+----------+---------------+------------+---------------+--------+------------+---------------------+------+--------+---------------------+-----------------------+
1 row in set (0.00 sec)

Ошибок больше нет.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/