Пример скрипта на 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
Пример скрипта для мониторинга состояния:
- #!/usr/bin/env python3
- import pymysql
- db_host = 'localhost'
- db_user = 'replmon'
- db_password = 'repl_password3'
- connection = pymysql.connect(db_host, db_user, db_password)
- cursor = connection.cursor(pymysql.cursors.DictCursor)
- cursor.execute("SHOW SLAVE STATUS")
- rows = cursor.fetchall()
- Slave_IO_Running = rows[0]['Slave_IO_Running']
- Slave_SQL_Running = rows[0]['Slave_SQL_Running']
- if Slave_IO_Running != "Yes" or Slave_SQL_Running != "Yes":
- print("0")
- else:
- print("1")
- 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.