4
Дек

Скрипт контроля выполнения репликации MySQL

И так, будем думать что вы выкурили и съели всё что можно, настроив репликацию с Master сервера на Slave через интернет или в локальной сети. Но бывают ситуации когда какой либо из серверов был не доступен из-за проблем с каналом, либо просто перегружался. Репликация может автоматически не восстановиться и вы в итоге потеряете свежесть вашей БД.

Предлагаю небольшой скрипт на bash с пояснениями. Идея проверки состояния принадлежит не мне, я лишь причесал сам код.

Для начала нужно дать права пользователю на Master сервере для удалённого подключения к БД. Команды Master сервера я буду писать синим цветом, а Slave сервера — зеленым

#mysql -u root -p — входим в MySQL

mysql> — видим что вошли и даём команду

<span style="color: #3366ff;"><span style="color: #888888;">mysql&gt;</span>GRANT RELOAD,SUPER,REPLICATION CLIENT ON *.* TO [email protected] IDENTIFIED BY 'пароль для подключения';</span>

где даём возможность подключится к любым базам

reply — имя пользователя при помощи которого будем подключатся
hdtv.zp.ua — хост который будет подключатся к Master серверу и является Slave сервером

Нам нужно получить информацию на Master сервере:

mysql&gt; <span style="color: #3366ff;">show master status;</span>
 +------------------+-----------+--------------+------------------+
 | File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB |
 +------------------+-----------+--------------+------------------+
 | mysql-bin.000008 | 632766771 |              |                  |
 +------------------+-----------+--------------+------------------+
 1 row in set (0.01 sec)

Эти данные нужны для начала репликации, о них позже

Теперь останавливаем на Slave сервере Slave режим базы

Входим в MySQL:

#<span style="color: #339966;">mysql -h 127.0.0.1 -P 3308 -p</span>
mysql&gt;<span style="color: #339966;">slave stop;</span>
mysql&gt;<span style="color: #339966;">CHANGE MASTER TO MASTER_HOST = 'hd.zp.ua', MASTER_USER = 'reply', MASTER_PASSWORD = 'пароль', MASTER_LOG_FILE = 'mysql-bin.000008', MASTER_LOG_POS = 632766771;</span>

При выполнении этой команды может быть ошибка, тогда выполняем: RESET SLAVE;

mysql&gt;<span style="color: #339966;">slave start;</span>

Если всё настроено правильно, то через минуту увидите на Slave сервере такой лог:

mysql> SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Собственно теперь сам скрипт, который проверяет состояние репликации и при отсутствии нормальной работы, получает данные на лог файл мастера и позицию, автоматически подставляя их в Slave сервер и перезапуская репликацию

#!/bin/bash
HOST="Master сервер"
USER="reply"
PASS_MASTER="пароль для подключения"
PORT_MASTER="3306"
PORT="3308"
PASS_SLAVE="пароль"
# проверка статуса слейва - должно быть 2 строки с 'YES'
COL=`/usr/bin/mysql -h 127.0.0.1 -P $PORT -p$PASS_SLAVE -e 'show slave status\G' | grep Running | grep Yes | wc -l`

# если строки не две
if [ $COL -ne 2 ] ; then
# остановка слейва
/usr/bin/mysql -h 127.0.0.1 -P $PORT -p$PASS_SLAVE -e 'stop slave'
# сброс слейва
/usr/bin/mysql -h 127.0.0.1 -P $PORT -p$PASS_SLAVE -e 'reset slave'
# смотрим имя файла и позицию на мастере
FILE=`mysql -h $HOST -P $PORT_MASTER -u repl -p$PASS_MASTER -e 'show master status' | grep -v File | awk ' {print $1}'`
POS=`mysql -h $HOST -P $PORT_MASTER -u repl -p$PASS_MASTER -e 'show master status' | grep -v File | awk ' {print $2}'`
# настройка слейва
/usr/bin/mysql -h 127.0.0.1 -P $PORT -p$PASS_SLAVE -e "CHANGE MASTER TO MASTER_HOST = '$HOST', MASTER_USER = '$USER', MASTER_PASSWORD = '$PASS_MASTER', MASTER_LOG_FILE = '$FILE', MASTER_LOG_POS = $POS"
# старт слейва
/usr/bin/mysql -h 127.0.0.1 -P $PORT -p$PASS_SLAVE -e 'start slave'
fi

HOST=»Master сервер»  — ip или доменное имя Master сервера к которому будем делать подключение
USER=»reply»  — пользователь которым будем делать подключение к Master серверу
PASS_MASTER=»пароль для подключения» — пароль подключения к Master серверу, придумали и указывали вначале
PORT_MASTER=»3306″ — порт MySQL Master сервера
PORT=»3308″ — порт MySQL Slave сервера
PASS_SLAVE=»пароль» — пароль подключения к Slave серверу

Обратная связь

    The average number of adverse effects was 3. T max is 23 minutes in females and 32 minutes in males. What other drugs will affect doxercalciferol Viagra natural sin receta. Archived from the original on 2009-08-14.

    Talk to your doctor before using this form of cefadroxil if you have diabetes. What should I tell my healthcare team before starting CABLIVI? There is no FDA guidance on the use of Tetracycline (oral) with respect to specific gender populations https://www.apotheke-rezeptfreie.com/. Opper K, Uder S, Song K Development of Heterogeneous and Homogeneous Platforms for Rapid Analysis of DNA-Protein Interactions.