2011-02-07 2 views
3

У меня есть 2 сервера, которые запускают один в качестве мастера и другого подчиненного. Я хочу проверить погоду, и таблицы имеют одинаковые данные. Как я могу проверить и подтвердить это? Таблица имеет более 23 миллионов строк.Как проверить, идентичны ли две большие таблицы?

Также в качестве первого шага я попытался запустить CHECKSUM TABLE tbl;

Но я получаю эту ошибку после 60 секунд: ERROR 2013 (HY000): Lost connection to MySQL server during query

Пожалуйста совет.

+0

Согласно этой странице http://bugs.mysql.com/bug.php?id=55419, это, кажется, связанный вопрос TCP тайм-аут. Вы не получите быстрых результатов, поэтому лучше сначала воспользуйтесь таймаутом. – AlexanderMP

+0

да, я знаю, но как увеличить срок? какую переменную мне нужно изменить? –

ответ

2

Вы также можете использовать mk-table-checksum, который является частью служебных программ Maatkit.

http://www.maatkit.org/doc/mk-table-checksum.html

+0

он выглядит неплохо, к несчастью, я не уполномочен устанавливать какие-либо новые наборы инструментов на сервере. –

+0

mk-table-checksum не требуется устанавливать на сервер. Однако, если вы используете его в режиме репликации (что очень рекомендуется, это ТОЛЬКО способ, которым я знаю проверку согласованности в часто меняющейся таблице), вам нужно будет создать таблицу для контрольных сумм. Вам также потребуется довольно много привилегий. – MarkR

1

Если ваши таблицы установлены как ведущие и подчиненные, вам не нужно выполнять эту проверку. Двоичная синхронизация между ними гарантирует вам, что они идентичны. Не так ли?

Если вы используете одну из последних версий mysql, вы также должны взглянуть на разбиение на таблицы: http://dev.mysql.com/doc/refman/5.1/en/partitioning.html, что ускорит большой доступ, например контрольные суммы.

+2

Нет, это действительно так. Они могут легко перестать синхронизироваться; репликация не гарантирует, что они будут оставаться в синхронизации, особенно когда хозяин или подчиненный теряет мощность, и особенно, если прочность на нетронутость не включена на ведущем устройстве, или используются недолговечные двигатели. – MarkR

+0

Интересно ... Я действительно думал, что целью репликации master-slave было то, что таблица была синхронизирована. И в случае неудачи одного из рабов, как только он снова стал доступен, он был повторно обработан. – Yahel

0

Я не знаю, может ли его 100% достичь того, чего вы хотите достичь, но хотя бы один способ проверить состояние репликации - реализовать какой-то простой механизм биения, как описано в книге High Performance MySQL.

Метод работает со временными метками, вставленными в таблицу и проверенными каждые 20 секунд. Вместе со статусным отчетом, который возвращает SHOW SLAVE STATUS \G, вы получаете точную статистику о текущем состоянии.

Вы видите, сколько ведомостей подчиняется за мастером или ошибки репликации. Если ошибок или ожидающих операторов нет, вы должны быть достаточно хороши, чтобы предположить, что в момент времени t ваши таблицы синхронизируются.

Смежные вопросы