Инструменты пользователя

Инструменты сайта


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<user> -p<password>
 
#####
# На исходной машине начинаем передачу данных, ограничивая скорость потока в 1024 kBit/s.
 
mysqldump -u<user> -p<password> <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.1694602227.txt.gz · Последнее изменение: 2023/09/13 13:50 — Diman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki