Пример скрипта на Python для мониторинга состояния репликации MariaDB / MySQL

Обновлено и опубликовано Опубликовано:

В данном примере рассмотрим простой вариант использования языка программирования Python для подключения к базе данных MariaDB / MySQL и получения от нее состояния репликации. В качестве операционной системы, на которой запустим скрипт, будем использовать Linux.

Для настройки репликации СУБД, можно использовать инструкцию Как настроить кластер MariaDB / MySQL.

Подготовка

В системе должен быть установлен python с поддержкой драйвера mysql. Сам питон ставим одной из команд.

а) На системах RPM (Red Hat, CentOS, Fedora):

yum install python3 python3-pip

б) На системах DEB (Debian, Ubuntu):

apt-get install python3 python3-pip

После установим драйвер PyMySQL для Python:

pip3 install PyMySQL

Подключаемся к СУБД MySQL:

mysql -uroot -p

Теперь создаем пользователя в СУБД, под которым мы будем подключаться к базе данных с целью получения статуса репликации:

> GRANT REPLICATION CLIENT ON *.* TO 'replmon'@'localhost' IDENTIFIED BY 'repl_password3';

* данной учетной записи мы даем минимальные права, необходимые для просмотра статуса.

Скрипт

Создаем скрипт в любой директории, например:

vi /scripts/mysql_repl_mon.py

Пример скрипта для мониторинга состояния:

  1. #!/usr/bin/env python3
  2.  
  3. import pymysql
  4.  
  5. db_host = 'localhost'
  6. db_user = 'replmon'
  7. db_password = 'repl_password3'
  8.  
  9. connection = pymysql.connect(db_host, db_user, db_password)
  10. cursor = connection.cursor(pymysql.cursors.DictCursor)
  11. cursor.execute("SHOW SLAVE STATUS")
  12. rows = cursor.fetchall()
  13.  
  14. Slave_IO_Running = rows[0]['Slave_IO_Running']
  15. Slave_SQL_Running = rows[0]['Slave_SQL_Running']
  16.  
  17. if Slave_IO_Running != "Yes" or Slave_SQL_Running != "Yes":
  18.     print("0")
  19. else:
  20.     print("1")
  21.  
  22. connection.close()

Даем права скрипту на выполнение:

chmod +x /scripts/mysql_repl_mon.py

Запускаем скрипт для проверки:

/scripts/mysql_repl_mon.py

... если репликация работает корректно, скрипт должен вернуть 1, иначе — 0.

Описание скрипта

1 Шебанг — путь до исполняемого файла интерпретатора
3 Импортируем библиотеку для работы с MySQL
5 - 7 Задаем переменные, которые будем использовать для подключения к СУБД
10 Подключаемся к базе
11 Создаем объект, который делает запросы и получает их результаты в виде списка
12 Выполняем SQL-запрос, который будет возвращать статус репликации баз данных
13 Получаем результат в виде массива и записываем его в переменную rows
15 Значение параметра Slave_IO_Running заносим в одноименную переменную
16 Значение параметра Slave_SQL_Running заносим в одноименную переменную
18 - 21 Проверяем значения переменных. Если одно из них не равно Yes, то возвращаем 0, иначе — 1
23 Закрываем соединение с базой данных

Как применять скрипт

Данный скрипт можно добавить в cron на выполнение с периодичностью раз в 5 минут (или чаще) и дописать на отправку письма администратору, в случае возникновения проблем.

Но лучше всего настроить его в связке с системой мониторинга. Для примера, читайте инструкцию Настройка мониторинга репликации MariaDB/MySQL с помощью Zabbix

# MySQL
Дмитрий Моск — частный мастер
Был ли вам полезен этот скрипт?

Да            Нет