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

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


wiki:technical:restore-replication-from-dump

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
wiki:technical:restore-replication-from-dump [2023/09/13 13:52] – [Для нестандартных случаев] Dimanwiki:technical:restore-replication-from-dump [2023/10/04 22:13] (текущий) – [Скрипты для выполнения репликации] Diman
Строка 18: Строка 18:
 # На мастере выполняем дамп нужной БД и переливаем ее на Slave: # На мастере выполняем дамп нужной БД и переливаем ее на Slave:
  
-mysqldump -u root -p'$PASSWD' $DB_NAME --add-drop-table | gzip -c | ssh $IP-SLAVE 'cat > /root/dump.sql.gz'+mysqldump -u root -p'$PASSWD' $DB_NAME --add-drop-table --insert-ignore --skip-lock-tables --single-transaction=TRUE | gzip -c | ssh $IP-SLAVE 'cat > /root/dump.sql.gz'
  
 </code> </code>
Строка 73: Строка 73:
 # На исходной машине начинаем передачу данных, ограничивая скорость потока в 1024 kBit/s. # На исходной машине начинаем передачу данных, ограничивая скорость потока в 1024 kBit/s.
  
-mysqldump -u root -p$PASSWD <database name> | gzip | trickle -u 1024 nc $TARGET-IP 54321 +mysqldump -u root -p$PASSWD $DB_NAME --insert-ignore --skip-lock-tables --single-transaction=TRUE | gzip | trickle -u 1024 nc $TARGET-IP 54321 
  
 </code> </code>
Строка 89: Строка 89:
  
 Откупориваем напиток и следим за выполнением дампа Откупориваем напиток и следим за выполнением дампа
 +
 +===== Скрипты для выполнения репликации =====
 +
 +Как и любая рутинная работа, регулярное выполнение репликации надоедает. Разработчикам пополам на то, что внесение изменений в структуру БД вызывает ее расслоение и админы страдают и зеленеют от восторга. Пришлось написать пару скриптов для синхронизации БД и подъеме реплики, когда все уже развалилось
 +==== Скрипт для мастера ====
 +
 +<code bash>
 +#/bin/bash
 +
 +SLAVE="192.168.1.2 -p65522"
 +MysqlPass='passppaSS4word'
 +DbList="db1 db2 db3 db4 db5 db77"
 +
 +#--
 +LOG=/tmp/dump-db.txt
 +
 +log(){ echo "$(date '+%F %T') $@" >> $LOG; echo "$(date '+%F %T') $@";}
 +
 +log "start>>>"
 +
 +FILE=$(mysql -e "show master status\G" | grep File | awk '{print $2}' | xargs)
 +POS=$(mysql -e "show master status\G" | grep Position | awk '{print $2}' | xargs)
 +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>/dev/null |gzip -c |ssh $SLAVE "cat > /root/$db-sql.gz"
 +  log "end dump $db"
 +done
 +
 +log "start resore in $SLAVE"
 +ssh $SLAVE "/bin/bash /root/restore.sh $FILE $POS &"
 +log "end restore in $SLAVE"
 +log "-=end=-"
 +
 +
 +</code>
 +
 +==== Скрипт для SLAVE ====
 +
 +<code bash>
 +
 +#!/bin/bash
 +
 +MASTER_IP='192.168.1.1'
 +ARX_PATH='/root'
 +##--
 +
 +if [ ! -z "$1" ]; then
 +  FILE=$1
 +fi
 +
 +if [ ! -z "$2" ]; then
 +  POS=$2
 +fi
 +#--
 +LOG=/tmp/dump-db.txt
 +
 +log(){ echo "$(date '+%F %T') $@" >> $LOG; echo "$(date '+%F %T') $@";}
 +
 +log "start>>>"
 +
 +DumpList=$(find $ARX_PATH -name '*-sql.gz' -type f |xargs)
 +
 +for file in $DumpList; do
 +  db=$(echo $file| sed "s|^/${ARX_PATH}/||;s|-sql.gz$||")
 +  mysql -e "CREATE DATABASE IF NOT EXISTS $db;"
 +  log "start restore $db from $file"
 +  zcat $file |  mysql -u root $db
 +  log "end dump $db"
 +done
 +
 +log "end dumps"
 +
 +if [ ! -z "$POS" ] && [ ! -z "$FILE" ]; then
 +  log "$FILE $POS"
 +  log "Start Replica"
 +  mysql -e "CHANGE MASTER TO MASTER_HOST='$MASTER_IP', MASTER_LOG_FILE='$FILE', MASTER_LOG_POS=$POS;"
 +  mysql -e "START REPLICA;"
 +  mysql -e "SHOW REPLICA STATUS\G"
 +fi
 +
 +log "<<<end"
 +
 +
 +
 +</code>
  
  
  
  
wiki/technical/restore-replication-from-dump.1694602349.txt.gz · Последнее изменение: 2023/09/13 13:52 — Diman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki