Как повторно синхронизировать Mysql DB, если у Master и slave есть разная firebase database с репликацией Mysql?

Mysql Server1 работает как MASTER .
Mysql Server2 работает как SLAVE .

Теперь репликация DB происходит от MASTER до SLAVE .

Server2 удаляется из сети и повторно подключается к нему через 1 день. После этого существует несоответствие в базе данных в главном и подчиненном.

Как повторно синхронизировать БД снова, так как после восстановления БД, взятого с Мастера на ведомый, также не решает проблему?

    Это полная пошаговая процедура для повторной синхронизации репликации master-slave с нуля:

    У мастера:

     RESET MASTER; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 

    Скопируйте значения результата последней команды где-нибудь.

    Не закрывая соединение с клиентом (потому что он освобождает блокировку чтения), выпустите команду для получения дампа мастера:

     mysqldump -u root -p --all-databases > /a/path/mysqldump.sql 

    Теперь вы можете освободить блокировку, даже если дамп еще не закончился. Чтобы сделать это, выполните следующую команду в клиенте MySQL:

     UNLOCK TABLES; 

    Теперь скопируйте файл дампа в подчиненное устройство с помощью scp или вашего предпочтительного инструмента.

    У раба:

    Откройте соединение с mysql и введите:

     STOP SLAVE; 

    Дамп данных мастера загрузки с этой консольной командой:

     mysql -uroot -p < mysqldump.sql 

    Синхронизация ведомых и мастер-журналов:

     RESET SLAVE; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98; 

    Если значения вышеуказанных полей - это те, которые вы скопировали ранее.

    Наконец, введите:

     START SLAVE; 

    Чтобы проверить, что все работает снова, после ввода:

     SHOW SLAVE STATUS; 

    Тебе следует увидеть:

     Slave_IO_Running: Yes Slave_SQL_Running: Yes 

    Это оно!

    Документация для этого на сайте MySQL ужасно устарела и пронизана ножными пушками (например, interactive_timeout). Выдача FLUSH TABLES WITH READ LOCK в качестве части вашего экспорта мастера обычно имеет смысл только при согласовании с моментальным снимком хранилища / файловой системы, таким как LVM или zfs.

    Если вы собираетесь использовать mysqldump, вам следует полагаться вместо этого на опцию –master-data для защиты от человеческой ошибки и как можно быстрее освобождать блокировки на главном компьютере.

    Предположим, что мастер – 192.168.100.50, а подчиненный – 192.168.100.51, каждый сервер имеет отдельный идентификатор сервера, мастер имеет двоичный вход в систему, а ведомое устройство имеет только чтение = 1 в my.cnf

    Чтобы подчинить ведомому устройству возможность начать репликацию сразу после импорта дампа, выполните команду CHANGE MASTER, но оставьте имя и положение файла журнала:

     slaveserver> CHANGE MASTER TO MASTER_HOST='192.168.100.50', MASTER_USER='replica', MASTER_PASSWORD='asdmk3qwdq1'; 

    Выдать GRANT на ведущем устройстве для использования ведомым:

     masterserver> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.100.51' IDENTIFIED BY 'asdmk3qwdq1'; 

    Экспортируйте мастер (на экране) с использованием сжатия и автоматически фиксируя правильные координаты бинарного журнала:

     mysqldump --master-data --all-databases --flush-privileges | gzip -1 > replication.sql.gz 

    Скопируйте файл replication.sql.gz в подчиненное устройство и затем импортируйте его с помощью zcat в экземпляр MySQL, запущенного на подчиненном устройстве:

     zcat replication.sql.gz | mysql 

    Начать репликацию, отправив команду ведомому:

     slaveserver> START SLAVE; 

    Необязательно обновите /root/.my.cnf на ведомом устройстве, чтобы сохранить тот же пароль root, что и главный.

    Если вы используете 5.1+, лучше сначала установить binlog_format мастера в MIXED или ROW. Остерегайтесь, что события, записанные в журнале, медленны для таблиц, у которых отсутствует первичный ключ. Обычно это лучше, чем альтернативная (и по умолчанию) конфигурация оператора binlog_format = (по умолчанию), поскольку она менее вероятна для получения неверных данных на ведомом.

    Если вы должны (но, вероятно, не должны) фильтровать репликацию, сделайте это с помощью slave-опций replicate-wild-do-table = dbname.% Или replicate-wild-ignore-table = badDB.% И используйте только binlog_format = row

    Этот процесс будет удерживать глобальную блокировку ведущего устройства в течение всего времени выполнения команды mysqldump, но не повлияет на мастер.

    Если у вас возникли соблазны использовать mysqldump -master-data -all-databases -single-transaction (потому что вы используете только таблицы InnoDB), вам, возможно, лучше всего будет служить MySQL Enterprise Backup или реализация с открытым исходным кодом под названием xtrabackup (любезно предоставлено Percona)

    Если вы не пишете непосредственно на подчиненном устройстве (Server2), единственной проблемой должно быть то, что Server2 не имеет никаких обновлений, которые произошли с момента его отключения. Просто перезапустите рабочую станцию ​​с помощью «START SLAVE»; должен получить все обратно к скорости.

    Я думаю, Мааткит помогает тебе! Вы можете использовать mk-table-sync. См. Эту ссылку: http://www.maatkit.org/doc/mk-table-sync.html

    Вот что я обычно делаю, когда подчиненный mysql выходит из синхронизации. Я посмотрел на mk-table-sync, но подумал, что раздел «Риски» страшно выглядит.

    На Мастере:

     SHOW MASTER STATUS 

    Выводимые столбцы (File, Position) будут нам полезны.

    В рабстве:

     STOP SLAVE 

    Затем выгрузите мастер db и импортируйте его в рабочую базу данных.

    Затем выполните следующие действия:

     CHANGE MASTER TO MASTER_LOG_FILE='[File]', MASTER_LOG_POS=[Position]; START SLAVE; 

    Где [File] и [Position] – значения, выводимые из «SHOW MASTER STATUS», выше.

    Надеюсь это поможет!

    Следуя за ответом Дэвида …

    Использование SHOW SLAVE STATUS\G даст читаемый человеком вывод.

    Я очень опаздываю на этот вопрос, однако я столкнулся с этой проблемой, и после долгих поисков я нашел эту информацию у Брайана Кеннеди: http://plusbryan.com/mysql-replication-without-downtime

    На Master сделайте резервную копию следующим образом:
    mysqldump –skip-lock-tables -single-transaction -flush-logs -hex-blob -master-data = 2 -A> ~ / dump.sql

    Теперь рассмотрите заголовок файла и запишите значения для MASTER_LOG_FILE и MASTER_LOG_POS. Вы будете нуждаться в них позже: head dump.sql -n80 | grep “MASTER_LOG”

    Скопируйте файл «dump.sql» в Slave и восстановите его: mysql -u mysql-user -p <~ / dump.sql

    Подключитесь к Slave mysql и выполните команду следующим образом: CHANGE MASTER TO MASTER_HOST = ‘master-server-ip’, MASTER_USER = ‘replication-user’, MASTER_PASSWORD = ‘slave-server-password’, MASTER_LOG_FILE = ‘значение сверху, MASTER_LOG_POS = значение сверху; НАЧАЛО СЛАВЯ;

    Чтобы проверить ход работы Slave: SHOW SLAVE STATUS;

    Если все хорошо, Last_Error будет пустым, а Slave_IO_State сообщит «Ожидание, что мастер отправит событие». Ищите Seconds_Behind_Master, который указывает, насколько далеко позади. YMMV. 🙂

    иногда вам просто нужно дать рабом удар

    пытаться

    стоп-ведомый;
    сбросить ведомый;
    запустить раб;
    показать статус раба;

    довольно часто, рабы, они просто зацикливаются на парнях 🙂

    Вот полный ответ, который, надеюсь, поможет другим …


    Я хочу настроить репликацию mysql с помощью master и slave, и поскольку единственное, что я знал, это то, что он использует файлы журнала для синхронизации, если подчиненный переходит в автономный режим и выходит из синхронизации, теоретически ему нужно только подключиться обратно его хозяину и продолжать читать файл журнала с того места, где он был остановлен, как упоминал пользователь malonso.

    Итак, вот результат теста после настройки мастера и подчиненного устройства, как упоминалось: http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html

    При условии, что вы используете рекомендуемую конфигурацию главного / подчиненного устройства и не записываете в подчиненное устройство, он и я, где это правильно (в отношении mysql-server 5.x). Мне даже не нужно было использовать «START SLAVE», он просто догнал своего хозяина. Но по умолчанию 88000 что-то повторяет каждые 60 секунд, поэтому я думаю, если вы исчерпаете то, что вам, возможно, придется запустить или перезапустить ведомый. В любом случае, для таких, как я, кто хотел знать, если раб переходит в автономный режим и снова работает, требуется ручное вмешательство. Нет, это не так.

    Возможно, исходный плакат имел повреждение в файле журнала? Но, скорее всего, это не просто сервер, работающий в автономном режиме в течение дня.


    вытащил из /usr/share/doc/mysql-server-5.1/README.Debian.gz, что, вероятно, имеет смысл и для не debian-серверов:

      * ДАЛЬНЕЙШИЕ ЗАЯВЛЕНИЯ О РЕПЛИКАЦИИ
     ===============================
     Если сервер MySQL работает как подчиненный репликатор, вы не должны
     set --tmpdir указывать на каталог в файловой системе на основе памяти или на
     каталог, который очищается при перезапуске сервера.  Репликация
     slave нуждается в некоторых временных файлах, чтобы пережить перезагрузку компьютера
     что он может реплицировать временные таблицы или операции LOAD DATA INFILE.  Если
     файлы во временном каталоге файлов теряются при перезапуске сервера,
     репликация не выполняется.
    

    вы можете использовать что-то sql как: показать переменные типа ‘tmpdir’; выяснить.

    Добавляем к популярному ответу, чтобы включить эту ошибку:

     "ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO", 

    Репликация с ведомого в один снимок:

    В одном окне терминала:

     mysql -h  -uroot -p 

    После подключения,

     RESET MASTER; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 

    Состояние отображается следующим образом: обратите внимание, что номер позиции меняется!

     +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 98 | your_DB | | +------------------+----------+--------------+------------------+ 

    Экспортируйте дамп, похожий на то, как он описал « использование другого терминала »!

    Выйдите и подключитесь к своей собственной БД (которая является подчиненным):

     mysql -u root -p 

    Тип команды:

     STOP SLAVE; 

    Импортируйте дамп, как указано (в другом терминале, конечно!) И введите следующие команды:

     RESET SLAVE; CHANGE MASTER TO MASTER_HOST = 'Master_IP_Address', MASTER_USER = 'your_Master_user', // usually the "root" user MASTER_PASSWORD = 'Your_MasterDB_Password', MASTER_PORT = 3306, MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 98; // In this case 

    После регистрации задайте параметр server_id (как правило, для новых / не реплицированных БД, это не задано по умолчанию),

     set global server_id=4000; 

    Теперь запустите раб.

     START SLAVE; SHOW SLAVE STATUS\G; 

    Выход должен быть таким же, как он описал.

      Slave_IO_Running: Yes Slave_SQL_Running: Yes 

    Примечание. После репликации главный и подчиненный используют один и тот же пароль!

    Я создал repository GitHub со сценарием, чтобы быстро решить эту проблему. Просто измените пару переменных и запустите их (во-первых, сценарий создает резервную копию вашей базы данных).

    Надеюсь, это поможет вам (и другим людям тоже).

    Как сбрасывать (повторно синхронизировать) репликацию Master-Slave MySQL

    Восстановление подчиненного устройства с использованием LVM

    Ниже приведен метод, который мы используем для восстановления подчиненных MySQL-серверов с использованием Linux LVM. Это гарантирует согласованный снимок, требуя очень минимального времени простоя вашего хозяина.

    Установите максимальное количество грязных страниц innodb на ноль на главном сервере MySQL. Это заставит MySQL написать все страницы на диске, что значительно ускорит перезапуск.

     set global innodb_max_dirty_pages_pct = 0; 

    Для контроля количества грязных страниц выполните команду

     mysqladmin ext -i10 | grep dirty 

    Как только число остановится, вы дойдете до точки, чтобы продолжить. Затем сбросьте мастер, чтобы очистить старые журналы журналов / журналов:

     RESET MASTER; 

    Выполните lvdisplay, чтобы получить путь LV

     lvdisplay 

    Результат будет выглядеть следующим образом:

     --- Logical volume --- LV Path /dev/vg_mysql/lv_data LV Name lv_data VG Name vg_mysql 

    Завершить основную базу данных с помощью команды

     service mysql stop 

    Затем сделайте снимок, mysql_snapshot будет новым именем логического тома. Если binlogs размещены на диске ОС, они также должны быть моментальными снимками.

     lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data 

    Запустить мастер снова с помощью команды

     service mysql start 

    Восстановить параметры грязных страниц по умолчанию

     set global innodb_max_dirty_pages_pct = 75; 

    Запустите lvdisplay еще раз, чтобы убедиться, что снимок есть и видимый

     lvdisplay 

    Вывод:

     --- Logical volume --- LV Path /dev/vg_mysql/mysql_snapshot LV Name mysql_snapshot VG Name vg_mysql 

    Установите снимок

     mkdir /mnt/mysql_snapshot mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot 

    Если у вас есть действующий MySQL-подчиненный, вам нужно его остановить

     service mysql stop 

    Затем вам нужно очистить папку данных MySQL

     cd /var/lib/mysql rm -fr * 

    Вернитесь к мастеру. Теперь rsync моментальный снимок для подчиненного MySQL

     rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/ 

    После завершения rsync вы можете размонтировать и удалить снимок

     umount /mnt/mysql_snapshot lvremove -f /dev/vg_mysql/mysql_snapshot 

    Создайте пользователя репликации на главном компьютере, если старый пользователь репликации не существует или пароль неизвестен

     GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass'; 

    Убедитесь, что файлы данных / var / lib / mysql принадлежат пользователю mysql, если вы можете опустить следующую команду:

     chown -R mysql:mysql /var/lib/mysql 

    Следующая запись позиции binlog

     ls -laF | grep mysql-bin 

    Вы увидите что-то вроде

     .. -rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017 -rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018 -rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019 -rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020 

    Здесь главный файл журнала является наивысшим номером файла в последовательности, а позиция журнала бина – размер файла. Запишите эти значения:

     master_log_file=mysql-bin.000020 master_log_post=65657162 

    Затем запустите подчиненный MySQL

     service mysql start 

    Выполните команду мастера изменений на подчиненном устройстве, выполнив следующее:

     CHANGE MASTER TO master_host="10.0.0.12", master_user="replication", master_password="YourPass", master_log_file="mysql-bin.000020", master_log_pos=65657162; 

    Наконец, начните подчинение

     SLAVE START; 

    Проверьте состояние подчиненного устройства:

     SHOW SLAVE STATUS\G 

    Убедитесь, что Slave IO запущен и ошибок подключения нет. Удачи!

    BR, Juha Vehnia

    Я недавно написал это в своем блоге, который находится здесь … Там немного больше деталей, но история такая же.

    http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html

    Interesting Posts

    Алгоритм обучения перцептрону не сходится к 0

    Есть ли способ установить Internet Explorer 9 на Windows

    Как я могу контролировать весь и любой интернет-трафик с моего домашнего ПК?

    Некоторые клавиши на моей клавиатуре перестали работать

    Как добавить символ маркера в TextView?

    Ссылка на ячейку в Excel с использованием значений из других ячеек на разных листах (вкладка)

    В чем разница между глубокой копией и мелкой копией?

    RcppArmadillo передает пользовательскую функцию

    Какой видеоразъем это, если не VGA?

    Почему я не должен #include ?

    iOS Simulator не смог установить приложение

    Android-устройство Chooser – устройство не отображается

    Как я могу автоматически переслать электронную почту и изменить отправителя?

    Как удалить элемент из списка?

    Visual Studio 2010 не автонастраивает статические библиотеки из проектов, которые являются зависимостями, поскольку это должно

    Давайте будем гением компьютера.