2013-11-01 3 views
12

Я пытаюсь добавить cronjob в crontab (сервер ubuntu), который создает резервные копии mysql db.mysqldump не работает в crontab

Выполнение скрипта в терминале, так как корень работает хорошо, но вставленный в crontab ничего не происходит. Я пытался запустить его каждую минуту, но в папке/var/db_backups файлы не отображаются.

(Другие cronjobs хорошо работают)

Вот cronjob:

* * * * * туздЫшпр -u корень -pHERE ЕСТЬ МОЙ ПАРОЛЬ --all-базы данных | gzip>/var/db_backups/database_date +% d% m% y`.sql.gz

В чем проблема?

+2

Что делать, если вы используете полный путь для 'mysqldump' и' gzip'? – fedorqui

+0

Вы планируете эту работу каждую минуту? –

+1

@fedorqui Я пробовал использовать:/usr/bin/mysqldump/usr/local/gnu/gzip, но это то же самое. – xspecial

ответ

2

Проверить журналы cron (должно быть в/var/log/syslog). Вы можете использовать grep для их фильтрации.

Grep CRON/вар/Журнал/Syslog

Также вы можете проверить свой локальный почтовый ящик, чтобы увидеть, если есть какие-либо письма хрон

/вар/почта/имя пользователя

Вы также можете настроить другую почтовую почту в вашем файле crontab

[email protected]

+0

Я пробовал grep CRON, и он дал мне: CMD (/ usr/bin/mysqldump -u root -pPASSWORD! --all-databases | gzip>/var/db_backups/database _... поэтому команда выполняется, но не производит вывод файлы – xspecial

+0

Вы установили cron для root или для другого пользователя? Возможно, ваш пользователь cron не имеет прав на выполнение mysqldump – adam187

+0

У меня еще нет настроек. Просто используйте crontab -e на пустом сервере ubuntu. Как настроить этот option? Спасибо – xspecial

1

В качестве альтернативы вы можете создать пользовательскую команду МояКоманда. К ним вы можете добавить дополнительные параметры. Вы должны предоставить разрешения на выполнение.

Предпочтительно иметь папку, в которой хранятся все ваши резервные копии, в этом случае, например, с помощью резервной копии, доступной для записи, которая сначала создается в «вашем доме».

Моя команда в "USR/местные/бен/МояКоманда":

#!/bin/bash 
MY_USER="your_user" 
MY_PASSWORD="your_pass" 
MY_HOME="your_home" 
case $1 in 
"backupall") 
    cd $MY_HOME/backup 
    mysqldump --opt --password=$MY_PASSWORD --user=$MY_USER --all-databases > bckp_all_$(date +%d%m%y).sql 
    tar -zcvf bckp_all_$(date +%d%m%y).tgz bckp_all_$(date +%d%m%y).sql 
    rm bckp_all_$(date +%d%m%y).sql;; 
*) echo "Others";; 
esac 

Cron: Работает на 1-й день каждого месяца.

0 0 1 * * /usr/local/bin/mycommand backupall 

Я надеюсь, что это поможет.

0

Хорошо, у меня была аналогичная проблема, и я смог ее исправить.

В вашем случае вы можете вставить эту команду туздЫшпра в сценарий затем источник профиля пользователя, запустившая команду туздЫшпра для например:

. /home/bla/.bash_profile 

затем использовать абсолютный путь к команде туздЫшпра

/usr/local/mysql/bin/mysqldump -u root -pHERE THERE IS MY PASSWORD --all-databases | gzip > /var/db_backups/database_`date +%d%m%y`.sql.gz 
0

Создайте новый файл и выполните код, чтобы свалить его в папку с файлом и закрепить его. Запустите этот скрипт через хрон

40

Вы должны бежать символ% с \

mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql 
+4

Я хотел бы проголосовать +10! Ни один другой источник, кроме этого (многие результаты Google, сайты, сообщения на форуме) не дал мне этот результат, это решение для меня. Без этого ответа я бы поискал часы ... – Basj

+1

Одна ошибка, которую я сделал, заключалась в том, чтобы оставить пробел между -p и моим паролем, не должно быть места, то есть -pPASSWORD – Manny265

+0

@Basj: что делать, если я искал часы, пока я нашел этот ответ? * mind blown * –

-1

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

service cron restart 

или

/etc/init.d/cron restart 
+1

, когда вы 'crontab -e' и' save', cron автоматически установит новый crontab, перезагрузка не понадобится – WeizhongTu

+0

перезапуск 'crontab' не требуется и фактически вводит в заблуждение по проблеме, упомянутой выше –

0

Я использую Percona Server (форк MySQL) на Ubuntu. Пакет (скорее всего, обычный пакет MySQL также) поставляется с учетной записью обслуживания, которая называется debian-sys-maint. Чтобы эта учетная запись использовалась, учетные данные создаются при установке пакета; и они хранятся в /etc/mysql/debian.cnf.

И теперь сюрприз: Симметричная ссылка /root/.my.cnf, указывающая на /etc/mysql/debian.cnf, также устанавливается.

Этот файл является an option file автоматически читает при использовании mysql или mysqldump. Таким образом, в основном у вас тогда были введенные учетные данные дважды - в этом файле и в командной строке. Это была проблема, которую я имел.

Таким образом, одним из способов избежать этого условия является использование опции --no-defaults для mysqldump. Файл опции затем не будет считан. Однако вы предоставляете учетные данные через командную строку, поэтому каждый, кто может выдать ps, может действительно увидеть пароль после запуска резервного копирования. Поэтому лучше всего создать собственный файл с именем пользователя и паролем и передать его mysqldump через --defaults-file.

Вы можете создать файл параметров с помощью mysql_config_editor или просто в любом редакторе.

mysqldump Запуск через sudo из командной строки, как root работает, только потому, что sudo обычно не меняется $HOME, так .my.cnf не найден, то. При работе в качестве кроны, это так.

0

Я пробовал то же самое, но я обнаружил, что дамп был создан с 0 КБ. Следовательно, я узнал о решении, которое сэкономило мое время.

Команда:

0 0 * * * mysqldump -u 'USERNAME' -p'PASSWORD' DATEBASE > /root/liveDB_`date +\%Y\%m\%d_\%H\%M\%S`.sql 

Примечание: 1) Вы можете изменить настройки в соответствии с вашими требованиями времени. Я устанавливал каждый день над командой.

2) Убедитесь, что вы вводите USERNAME, PASSWORD и DATABASE внутри одной кавычки (').

3) Запишите команду выше в Crontab.

Надеюсь, это поможет кому-то.