Назад | Перейти на главную страницу

Мой предыдущий член команды «реплицирует» базу данных с одного сервера на другой. Но теперь это больше не синхронизируется

База данных 1 - это обычный сервер базы данных. Он скопировал его в базу данных 2 ... прямой клон. Мастер-Мастер. Они все время «синхронизированы». У каждого из них 40 миллионов строк.

Сегодня база данных 2 «сломана» и, кажется, возвращает результаты, отличные от базы данных 1. Это ненормально, потому что они должны быть идентичными.

Что бы вы посоветовали исправить?

Следует ли мне удалить базу данных 2 и заново реплицировать базу данных 1 в базу данных 2? Если да, то как мне это сделать?

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

Прежде чем пытаться что-либо еще, проверьте, является ли БД 2 подчиненным устройством репликации для БД 1. Выполните «ПОКАЗАТЬ СОСТОЯНИЕ ВЕДОМОГО» в БД 2. Если это дает результат, вероятно, произошла ошибка, остановившая репликацию.

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
       Slave_IO_State: Waiting for master to send event
          Master_Host: localhost
          Master_User: root
          Master_Port: 3306
        Connect_Retry: 3
      Master_Log_File: gbichot-bin.005
  Read_Master_Log_Pos: 79
       Relay_Log_File: gbichot-relay-bin.005
        Relay_Log_Pos: 548
Relay_Master_Log_File: gbichot-bin.005
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
      Replicate_Do_DB:
  Replicate_Ignore_DB:
           Last_Errno: 0
           Last_Error:
         Skip_Counter: 0
  Exec_Master_Log_Pos: 79
      Relay_Log_Space: 552
      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: 8

Проверьте столбцы с именем

Slave_IO_Running
Slave_SQL_Running   and
Seconds_behind_master

Если в «текущих» столбцах отображается «Нет», а значение «seconds_behind_master» больше нескольких секунд, проверьте значение в «last_error». Это должно дать вам представление о том, где произошла ошибка. Попробуйте исправить это (изменив данные в DB 2) и дайте ему новый шанс, запустив «START SLAVE» в DB 2. Сразу после этого отметьте «SHOW SLAVE STATUS».

Чтобы копнуть глубже, я рекомендую прочитать руководство по MySQL, особенно главу о настройках репликации: Репликация MySQL 5.0

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

Из официальная документация:

Если ваша база данных особенно велика, копирование файлов необработанных данных может быть более эффективным, чем использование mysqldump и импорт файла на каждом ведомом устройстве.

  1. Остановите репликацию.
  2. Остановите все операции с базами данных (без доступа, чтения и записи)
  3. Полностью выключите обе базы данных.
  4. ОПАСНО но если у вас есть большие наборы данных, вы можете скопировать каталог «data» в Master 2 после остановки репликации и очистки бинарных журналов. Это будет быстро и на 100% воспроизведет вашего Мастера. ОПАСНО
  5. Перезагрузите базы данных.
  6. Перезапустите репликацию.

Вам необходимо сначала подтвердить, содержит ли БД 2 только подмножество данных БД 1 или оба сервера содержат записи, которых нет на другом (т.е. в БД 1 также отсутствуют данные). Если это так, то удалите репликацию, сотрите БД 2 и начните снова, на этот раз сделав это правильно ...

Если это не так, то вам нужно написать много SQL.