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

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


wiki:technical:restore-replication-from-dump

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
wiki:technical:restore-replication-from-dump [2023/09/13 17:33] – [Для нестандартных случаев] Dimanwiki:technical:restore-replication-from-dump [2023/10/04 22:13] (текущий) – [Скрипты для выполнения репликации] Diman
Строка 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.1694615601.txt.gz · Последнее изменение: 2023/09/13 17:33 — Diman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki