Мне нужно создать отчет по результатам проверки базы данных MySQL и автоматического восстановления.
Но не хочу каждый раз получать полный отчет: только в случае необходимости ремонта
Запланированная (cron) задача запускает mysqlcheck
Я хочу получать по электронной почте информацию о возможном необходимом ремонте, ремонте успех, ремонт не удаётся ...
Но не хочу каждый раз получать полный отчет: только ремонты
Я запускаю mysqlcheck следующим образом:
mysqlcheck --user=myuser --password=mypwd -c --auto-repair dbname > ouput.log
Обнаружил в блоге, что вывод mysqlcheck может выглядеть так в случае ремонта [ 1111]
Repairing tables
dbname.table1
warning : Number of rows changed from 3 to 1
status : OK
dbname.table2
warning : Number of rows changed from 5454 to 5455
status : OK
dbname.table3
warning : Number of rows changed from 471859 to 471860
status : OK
Поскольку я не могу найти никакой официальной документации о том, как выглядит точный вывод, мне нужна помощь для создания текстового файла отчета, созданного путем обработки вывода mysqlcheck.
Возможно, какой-нибудь маг из регулярных выражений может составить отчет с именами восстановленных таблиц, уведомлением об отказе и т. Д.
Это относится к серверу mysql, доступному в официальных репозиториях Ubuntu
mysql-server 5.7.25-0ubuntu0.18.04.2
Этот простой скрипт получает результат mysqlcheck и проверяет вывод для «Восстановление таблиц» . Поскольку эта строка появляется только тогда, когда таблица повреждена.
Если существует, то отправляет электронное письмо на нужный адрес.
#!/bin/bash
result=`mysqlcheck --user=myuser --password=mypass --auto-repair dbname;`
if [[ $result == *"Repairing tables"* ]]; then
echo $result | mailx -s 'email subject' username@example.com
fi
--silent
При запуске mysqlcheck
передайте параметр -s
или --silent
и , только сообщения об ошибках выводят .
Измените вашу команду следующим образом:
mysqlcheck --user=myuser --password=mypwd -c --auto-repair --silent dbname
Нет необходимости перенаправлять вывод в рабочий файл и анализировать его. Вам нужно cron
настроить отправку электронной почты. Из этой Q & A: Как настроить Cron для отправки электронных писем?
MAILTO="example.email@gmail.com"
* * * * * mysqlcheck --user=myuser --password=mypwd -c --auto-repair --silent dbname
Я полагаю, что лучшая вещь состояла бы в том, чтобы установить его этот путь:
crontab -e
запланируйте bashscript, например: - * * * * /bin/bash /root/custom-mysqlrepair.sh
#!/bin/bash
#hint: adding user and password to .my.cnf should remove the need for user and password in this command
OUTPUT=$((mysqlcheck --user=myuser --password=mypwd -c --auto-repair dbname) 2>&1)
OUTPUT_NO_NEWLINES=`$OUTPUT | tr '\n'`
if [[ $string == *"Number of rows changed from"* ]]; then
echo $OUTPUT
fi
теперь, что собирается произойти:
Обратите внимание, что это - все еще непротестированная теория, но должно получить Вас движение.