wiki:technical:restore-replication-from-dump
Это старая версия документа!
Содержание
Восстановление репликации master-slave MySQL
Действия на мастере
# На мастере запоминаем текущую позицию и имя файла: mysql> show master status\G *************************** 1. row *************************** File: mysql-bin.045317 Position: 41951754 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
# На мастере выполняем дамп нужной БД и переливаем ее на Slave: mysqldump -u root -p'$PASSWD' $DB_NAME --add-drop-table | gzip -c | ssh $IP-SLAVE 'cat > /root/dump.sql.gz'
На слейве
# На слейве разворачиваем дамп в БД: zcat /root/dump.sql.gz | mysql -u 'root' -p'$PAsswd' $DB_NAME # На слейве меняем файл и позицию mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.045317', MASTER_LOG_POS=41951754; # И стартуем репликацию: mysql> START SLAVE;
Если дамп сделан без проверки удаления и очистки таблиц, то можно очистить так:
mysqldump --add-drop-table --no-data $DB_NAME | grep ^DROP | sed -e 's/DROP TABLE IF EXISTS/TRUNCATE TABLE/g' | mysql $DB_NAME
Иногда следует обернуть TRUNCATE в SET FOREIGN_KEY_CHECKS=0; и SET FOREIGN_KEY_CHECKS=1;:
SET FOREIGN_KEY_CHECKS=0; TRUNCATE TABLE `macro_estat_all_data`; TRUNCATE TABLE `macro_estat_geo`; TRUNCATE TABLE `macro_estat_items`; TRUNCATE TABLE `macro_estat_nace_r2`; TRUNCATE TABLE `macro_estat_s_adj`; TRUNCATE TABLE `macro_estat_tasks`; TRUNCATE TABLE `macro_estat_units`; TRUNCATE TABLE `macro_tabs`; TRUNCATE TABLE `sources`; SET FOREIGN_KEY_CHECKS=1;
Для нестандартных случаев
Иногда случается так, что исходный сервер под нагрузкой, а целевой мертвый. При этом клиент прижимистый, а репликация ему ну очень нужна. Действуем размеренно и нежно, как с беременной кобылой.
##### # На целевой машине слушаем порт 54321 через netcat nc -l 54321 | gzip -d -c | mysql $DB_NAME -u root -p $PASSWD ##### # На исходной машине начинаем передачу данных, ограничивая скорость потока в 1024 kBit/s. mysqldump -u root -p$PASSWD <database name> | gzip | trickle -u 1024 nc $TARGET-IP 54321
Можно еще заморочиться и добавить шифрование в пайпы.
# На исходном сервере шифруем паролем 256256 /usr/bin/openssl enc -pbkdf2 -pass pass:256256 -e # На целевом расшифровываем тем же паролем /usr/bin/openssl enc -pbkdf2 -pass pass:256256 -d
Откупориваем напиток и следим за выполнением дампа
wiki/technical/restore-replication-from-dump.1694602349.txt.gz · Последнее изменение: 2023/09/13 13:52 — Diman