Cronjob, который оптимизирует и очищает все базы данных MySQL - PullRequest
1 голос
/ 04 августа 2011

Я пытаюсь настроить работу cron, которая ежедневно оптимизирует базу данных mysql, используя debian на виртуальной машине.

Сначала я попытался использовать mysqlcheck следующим образом:

0 * * * * mysqlcheck -Aao –auto-repair -u root -p[password] > /dev/null

Я получил эту ошибку: mysqlcheck: Получена ошибка: 1045: доступ запрещен для пользователя 'root' @ 'localhost' (используется пароль: YES) при попытке подключения

после поиска этой ошибки я обнаружил Дейва Стоддарда Комментарий , который столкнулся с той же проблемой:

0 * * * * /usr/local/bin/mysqlcheck --defaults-file=/root/.my.cnf --all-databases --auto-repair 2>&1 | grep -v "OK" | mail -s "Database Problem" root

или 0 * * * * /usr/local/bin/mysqlcheck --defaults-file=/root/.my.cnf --all-databases --auto-repair 2>&1 | grep -v "OK" | mail -s "Database Problem" root

Ошибка сверху:

/bin/sh: root: command not found
/bin/sh: /usr/local/bin/mysqlcheck: No such file or directory

Ответы [ 2 ]

5 голосов
/ 04 августа 2011

серьезно, вы можете переусердствовать,
ваш подход вызовет некоторую ненужную блокировку таблицы,
, что означает, что он легко замораживает ваше приложение, требующее доступа к базе данных

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

что такое свободное пространство?

этот запросвернет список таблиц, которые необходимо оптимизировать

select TABLE_SCHEMA, TABLE_NAME
from information_schema.tables 
where data_free>0;

построить с помощью простого скрипта bash

chk="select concat(TABLE_SCHEMA,'.', TABLE_NAME) from information_schema.tables where data_free>0;"

for tbl in $(mysql -u root -pxxx -N <<< $chk)
do
  mysql -u xxx -pxxx -N <<< "optimize table $tbl"
done
0 голосов
/ 04 августа 2011

Две ошибки довольно очевидны ... Первая говорит, что root @ localhost не имеет доступа к базе данных - либо вы используете неправильный пароль, либо учетную запись root в MySQL (которая обычно присутствует по умолчанию)) был удален.

Ошибка почты типична для использования mail в разных системах - стандартная почта GNU (из GNU mailutils 1.2) имеет опцию -E для выполнения команды, которая является вашей почтовой командойне хватает.Проверьте man mail, чтобы увидеть, имеет ли опция другое имя в вашей системе.

...