Как построить отчет из вывода mysqlcheck

Мне нужно создать отчет по результатам проверки базы данных 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

2
задан 20 April 2019 в 06:43

3 ответа

Этот простой скрипт получает результат 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
0
ответ дан 20 April 2019 в 06:43
Режим

--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
0
ответ дан 20 April 2019 в 06:43

Я полагаю, что лучшая вещь состояла бы в том, чтобы установить его этот путь:

  • в 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
  • сделайте исполняемый файл сценария и поместите его в/root/

теперь, что собирается произойти:

  • крон запускает скрипт
  • сценарий пытается выполнить Вашу команду и сохраняет вывод к переменной
  • ЕСЛИ переменная содержит Ваше желаемое слово, распечатайте целый вывод
  • crontab должен поймать вывод в вывод MAILTO и обычно посылать его по электронной почте

Обратите внимание, что это - все еще непротестированная теория, но должно получить Вас движение.

0
ответ дан 20 April 2019 в 06:43

Другие вопросы по тегам:

Похожие вопросы: