Root Only

подайте на пропитание, бывшему админу бывшего локалхоста

Menu
  • Администрирование
  • Программирование
  • Монетизация
  • Продвижение
  • Хлам
Menu

Скрипт на bash для создания mysql slave без даунтайма

Данный скрипт, написанный на bash-е, несет собой цель демонстрации алгоритма потабличного восстановления/создания mysql-репликации без даунтайма. В данном конкретном примере подразумевается наличие всех необходимых реквизитов для доступа к master-а и slave-у, а так-же минимальная настройка — наличие учетной записи для репликации на мастере + включенный bin-log.


#!/bin/bash MASTER_HOST='master-mysql.domain' SLAVE_HOST='slave-mysql.domain' DATABASE='database_name' echo "[i] сбрасываем slave" mysql -h "$SLAVE_HOST" -e "SLAVE STOP;" mysql -h "$SLAVE_HOST" -e "RESET SLAVE;" echo "[i] импорт структуры базы" mysqldump --no-data -h "$MASTER_HOST" "$DATABASE" | sed \ -e 's/ENGINE=MEMORY/ENGINE=BLACKHOLE/g'\ -e 's/ENGINE=InnoDB/ENGINE=BLACKHOLE/g'\ -e 's/ENGINE=MyISAM/ENGINE=BLACKHOLE/g' | mysql -h "$SLAVE_HOST" "$DATABASE" echo "[+] ок" echo "[i] создание slave" mysql -h "$MASTER_HOST" -Nse "SHOW MASTER STATUS;" | awk '{print "CHANGE MASTER TO MASTER_HOST=\"master-mysql.domain\",MASTER_USER=\"repl_user\",MASTER_PASSWORD=\"password\",MASTER_LOG_FILE=\""$1"\",MASTER_LOG_POS="$2";"}' | mysql echo "[i] запуск slave" mysql -e "SLAVE START;" echo "[+] ok" for TABLE in $(mysql -h "$SLAVE_HOST" -Nse "SELECT TABLE_NAME from TABLES WHERE TABLE_SCHEMA='$DATABASE' AND ENGINE='BLACKHOLE';" information_schema); do echo "[i] таблица $TABLE" echo "[i] останавливаем slave" mysql -h "$SLAVE_HOST" -e "STOP SLAVE;" echo "[i] создание дампа" mysqldump --master-data=2 -h "$MASTER_HOST" "$DATABASE" "$TABLE" | gzip > dump.sql.gz echo "[+] ok" echo "[i] готовим слейв" CHANGEMASTER=$(zgrep -m1 'CHANGE MASTER' "dump.sql.gz") if [ $? -ne 0 ]; then echo "[e] CHANGE MASTER отсутствует в дампе $TABLE"; exit 1; fi STARTUNTIL=$(echo "$CHANGEMASTER" | sed 's/-- CHANGE MASTER TO/START SLAVE UNTIL/') mysql -e "$STARTUNTIL" if [ $? -ne 0 ]; then echo "[e] ошибка запуска slave"; exit 1; fi echo "[+] $STARTUNTIL" while true ; do if [ $(mysql -e 'SHOW SLAVE STATUS\G' | grep -E '^\s*(Slave_SQL_Running: No|Slave_IO_Running: Yes)\s*
| wc -l) -eq 2 ]; then echo echo "[+] `date +"%Y-%m-%d %T"` slave готов" break else sleep 1 echo -n . fi done echo "[i] импорт таблицы $TABLE" zcat dump.sql.gz | mysql -h "$SLAVE_HOST" "$DATABASE" rm dump.sql.gz echo "[+] ok" echo "[i] запуск slave" mysql -h "$SLAVE_HOST" -e "START SLAVE;" echo "[+] ok" sleep 1 done

Поиск

Метки

adb antiddos bash bubble cache console ddos debian docker eclipse elasticsearch elk ffmpeg fs gentoo glusterfs grafana healthcheck hicam ipcam jquery jscript mail mysql mysqldump nginx nodejs php putty python redirect replication RSS serial socat ssh ssh-agent sysfs systemd tinymce uart usb vim vnc windows

Безопасность

© 2026 Root Only