Поки ви не виконуєте жодних тверджень INSERT / UPDATE / DELETE безпосередньо на Slave, ваш Slave повинен бути просто чудовим. В іншому випадку реплікація MySQL може зламатися, якщо ВСТУПИТИ новий рядок у mydb.mytable на підлеглому, і через реплікацію підлеглий пізніше виявить ВСТУП рядка до mydb.mytable з тим самим ПЕРВИЧНИМ КЛЮЧ. Це призводить до помилки 1062 (дублікат ключа).
Єдиний спосіб, який ви можете написати на Slave, не порушуючи реплікацію MySQL, це:
- Майстер має бази даних db1, db2, db3
- Slave реплікує бази даних db1, db2, db3 від Master
- Біжи
CREATE DATABASE db4;
на Раба
- Ви робите ВСТАВКИ / ОНОВЛЕННЯ / ВИДАЛЕННЯ лише до db4 на підлеглому
- Ви не робите ВСТАВКИ / ОНОВЛЕННЯ / УДАЛЕННЯ лише для db1, db2, db3 на підлеглому
Щоб виявити, що Master і Slave не синхронізовані, не завантажуючи жодних інструментів, виберіть будь-яку таблицю і запустіть таблицю CHECKSUM проти таблиці на Master та копії Slave тієї ж таблиці.
ПРИКЛАД
Якщо у вас є таблиця mydb.mytable
, запустіть команду проти неї:
mysql> CHECKSUM TABLE mydb.mytable;
Якщо значення не повертаються однаковими, то щось не відповідає синхронізації.
Якщо ви хочете обстежити купу столу масою, можете опустити MAATKIT Percona. Вам знадобляться два конкретні інструменти (Percona також має інструментарій Percona, який вони самі розщедрили від MAATKIT, який зараз просувається більше)
або
pt-table-checksum
виконає таблицю CHECKSUM проти всіх таблиць на Master і Slave. Ви можете налаштувати його для роботи з усіма базами даних лише на конкретних.
pt-table-sync
можна запустити на раба проти будь-якого столу. Використовуючи параметри --print та --sync-to-master, ви можете побачити, які оператори SQL потрібно виконати на Slave, щоб вони повністю відповідали Master. Цей інструмент не працює з таблицею, у якій відсутні ПЕРВІЙНИЙ КЛЮЧ або УНІКАЛЬНИЙ КЛЮЧ.
Я використовую MAATKIT роками. Я все ще роблю. Я ще не пробував інструментарій Percona, але впевнений, що він повинен бути такої ж якості, як і MAATKIT.