Что произойдет в случае репликации MySQL Master / Slave, если я запишу в Slave?

17

Несколько вопросов

  • Останется ли запись «Ведомый» до тех пор, пока в таблицу на ведущем устройстве не будет добавлена ​​/ обновлена ​​/ удалена запись, которая может повлиять на Ведомого устройства?

  • Если нет, как я могу убедиться, что подчиненное устройство синхронизировано с ведущим в будущем (путем удаления записи подчиненного устройства или копирования этой записи вручную в ведущее устройство)?

  • Самое главное, как я могу определить, что таблицы не синхронизированы?

kfmfe04
источник
пожалуйста, объясните свой вопрос правильно ...
Абдул Манаф
1
Разве отношения «хозяин / ведомый» не являются односторонней синхронизацией между ведущим и ведомым, но не наоборот? Я спрашиваю, что произойдет, если вы напишете рабу в такой настройке.
kfmfe04

Ответы:

14

Пока вы не выполняете никаких инструкций INSERT / UPDATE / DELETE непосредственно на подчиненном устройстве, ваше подчиненное устройство должно быть в порядке. В противном случае MySQL Replication может прерваться, если вы ВСТАВИТЕ новую строку в mydb.mytable на подчиненном устройстве, и через репликацию Slave позже обнаружит INSERT строки в mydb.mytable с тем же PRIMARY KEY. Это приводит к ошибке 1062 (Duplicate Key).

Единственный способ написать в Slave без прерывания MySQL Replication - это:

  • Мастер имеет базы данных db1, db2, db3
  • Ведомый реплицирует базы данных db1, db2, db3 от Master
  • Ты бежишь CREATE DATABASE db4; на Раба
  • Вы делаете INSERTs / UPDATEs / DELETEs только для db4 на Slave
  • Вы не делаете INSERT / UPDATEs / DELETEs только для db1, db2, db3 на подчиненном устройстве.

Чтобы обнаружить несинхронизацию главного и подчиненного без загрузки каких-либо инструментов, выберите любую таблицу и запустите CHECKSUM TABLE. главного и подчиненного для таблицы на главном и копии ведомой этой же таблицы.

ПРИМЕР

Если у вас есть таблица mydb.mytable, выполните команду против нее:

mysql> CHECKSUM TABLE mydb.mytable;

Если значения не совпадают, значит что-то не синхронизировано.

Если вы хотите изучить кучу столов в большом количестве, вы можете использовать MAATKIT от Percona. Вам понадобятся два специальных инструмента (у Percona также есть Percona Toolkit, который они сами разделили из MAATKIT, который теперь продвигается больше)

или

pt-table-checksumвыполнит ТАБЛИЦУ КОНТРОЛЯ СУММ против всех столов на Master и Slave. Вы можете настроить его, чтобы сделать все базы данных только на определенные.

pt-table-syncможно запустить на Рабе против любого стола. Используя опции --print и --sync-to-master, вы можете увидеть, какие операторы SQL необходимо выполнить на подчиненном устройстве, чтобы оно полностью соответствовало мастеру. Этот инструмент не работает с таблицей, в которой отсутствует PRIMARY KEY или UNIQUE KEY.

Я использовал MAATKIT в течение многих лет. Я все еще делаю. Я еще не пробовал Percona Toolkit, но я уверен, что он должен быть того же качества, что и MAATKIT.

RolandoMySQLDBA
источник
Ты за подробный ответ. Я думал, что у меня есть больше вопросов, но я думаю, что ваши ответы охватили все случаи (pt-table-sync, кажется, действительно полезен).
kfmfe04