wiki:technical:restore-replication-from-dump
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
wiki:technical:restore-replication-from-dump [2022/08/25 18:20] – [На слейве] Diman | wiki:technical:restore-replication-from-dump [2023/10/04 22:13] (текущий) – [Скрипты для выполнения репликации] Diman | ||
---|---|---|---|
Строка 18: | Строка 18: | ||
# На мастере выполняем дамп нужной БД и переливаем ее на Slave: | # На мастере выполняем дамп нужной БД и переливаем ее на Slave: | ||
- | mysqldump -u root -p' | + | mysqldump -u root -p' |
</ | </ | ||
Строка 59: | Строка 59: | ||
</ | </ | ||
+ | |||
+ | ===== Для нестандартных случаев ===== | ||
+ | |||
+ | Иногда случается так, что исходный сервер под нагрузкой, | ||
+ | |||
+ | <code bash> | ||
+ | ##### | ||
+ | # На целевой машине слушаем порт 54321 через netcat | ||
+ | |||
+ | nc -l 54321 | gzip -d -c | mysql $DB_NAME -u root -p $PASSWD | ||
+ | |||
+ | ##### | ||
+ | # На исходной машине начинаем передачу данных, | ||
+ | |||
+ | mysqldump -u root -p$PASSWD $DB_NAME --insert-ignore --skip-lock-tables --single-transaction=TRUE | gzip | trickle -u 1024 nc $TARGET-IP 54321 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Можно еще заморочиться и добавить шифрование в пайпы. | ||
+ | |||
+ | <code bash> | ||
+ | # На исходном сервере шифруем паролем 256256 | ||
+ | / | ||
+ | |||
+ | # На целевом расшифровываем тем же паролем | ||
+ | / | ||
+ | |||
+ | </ | ||
+ | |||
+ | Откупориваем напиток и следим за выполнением дампа | ||
+ | |||
+ | ===== Скрипты для выполнения репликации ===== | ||
+ | |||
+ | Как и любая рутинная работа, | ||
+ | ==== Скрипт для мастера ==== | ||
+ | |||
+ | <code bash> | ||
+ | #/bin/bash | ||
+ | |||
+ | SLAVE=" | ||
+ | MysqlPass=' | ||
+ | DbList=" | ||
+ | |||
+ | #-- | ||
+ | LOG=/ | ||
+ | |||
+ | log(){ echo " | ||
+ | |||
+ | log " | ||
+ | |||
+ | FILE=$(mysql -e "show master status\G" | ||
+ | POS=$(mysql -e "show master status\G" | ||
+ | log "File $FILE, POSITION $POS" | ||
+ | |||
+ | for db in $DbList; do | ||
+ | log "start dump $db" | ||
+ | mysqldump -u root -p$MysqlPass --add-drop-table --insert-ignore --skip-lock-tables --single-transaction=TRUE -B $db 2>/ | ||
+ | log "end dump $db" | ||
+ | done | ||
+ | |||
+ | log "start resore in $SLAVE" | ||
+ | ssh $SLAVE "/ | ||
+ | log "end restore in $SLAVE" | ||
+ | log " | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Скрипт для SLAVE ==== | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | #!/bin/bash | ||
+ | |||
+ | MASTER_IP=' | ||
+ | ARX_PATH='/ | ||
+ | ##-- | ||
+ | |||
+ | if [ ! -z " | ||
+ | FILE=$1 | ||
+ | fi | ||
+ | |||
+ | if [ ! -z " | ||
+ | POS=$2 | ||
+ | fi | ||
+ | #-- | ||
+ | LOG=/ | ||
+ | |||
+ | log(){ echo " | ||
+ | |||
+ | log " | ||
+ | |||
+ | DumpList=$(find $ARX_PATH -name ' | ||
+ | |||
+ | for file in $DumpList; do | ||
+ | db=$(echo $file| sed " | ||
+ | mysql -e " | ||
+ | log "start restore $db from $file" | ||
+ | zcat $file | mysql -u root $db | ||
+ | log "end dump $db" | ||
+ | done | ||
+ | |||
+ | log "end dumps" | ||
+ | |||
+ | if [ ! -z " | ||
+ | log "$FILE $POS" | ||
+ | log "Start Replica" | ||
+ | mysql -e " | ||
+ | mysql -e "START REPLICA;" | ||
+ | mysql -e "SHOW REPLICA STATUS\G" | ||
+ | fi | ||
+ | |||
+ | log "<<< | ||
+ | |||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
wiki/technical/restore-replication-from-dump.txt · Последнее изменение: 2023/10/04 22:13 — Diman