2009-03-02 1 views
10

Я попытался сделать резервное задание cron на моем веб-сервере, на котором работает FreeBSD. В настоящее время это выглядит примерно так:Безопасное создание резервной копии cron - my.cnf не читается

/usr/local/bin/mysqldump --opt --single-transaction --comments --dump-date --no-autocommit --all-databases --result-file=/var/backups/mysql/all.sql

Это прекрасно работает, когда я запускаю его как корень (так как корень имеет .my.cnf с именем пользователя и пароль для подключения, но когда работа выполняется по хрон, файл my.cnf не читается.

есть ли способ обойти это без необходимости ставить имя пользователя и пароль в самой команде (так как это своего рода небезопасно)?

Странно, у меня такая же настройка с PostgreSQL и .pgpass файлом, и это работает как шарм.

ответ

16

Используйте --defaults-extra-file вариант, чтобы сказать ему, где найти файл .my.cnf (при условии, что это читаемый какой пользователь работает mysqldump

+0

* вздох * до легкого;) * upvote * – Node

+0

А, да. Как я пропустил это. Я просто буду придерживаться этой ночной работы. Посмотрите вперед, чтобы получить сообщение, что он, когда я сплю :) – mikl

+0

На самом деле, это было не так просто найти в онлайн-документах MySQL. Ни одна из отдельных программ не упоминает эту опцию в своих файлах. – Alnitak

2

Thats weird на самом деле cron должен читать .my.cnf. Как запустить cronjob в/etc/crontab или crontab -e? Вы можете попробовать использовать AutoMySQLBackup, который представляет собой небольшой скрипт оболочки с использованием mysqldump.

+0

Ну, на самом деле это не выполняется непосредственно из cron, а из 'периодической' системы FreeBSD. Это фактически файл сценария в/usr/local/etc/периодический/ежедневный Периодические задания cron запускаются через '/ etc/cron' следующим образом: >' 1 3 * * * корень периодический ежедневно' – mikl

+0

Oh, Markdown в комментариях не включен. Надеюсь, его разборчиво так или иначе :) – mikl

0

На FreeBSD вы можете добавить следующее:.

security.bsd.see_other_uids=0 

К/и т.д. /sysctl.conf и перезагрузка, или использовать

sysctl security.bsd.see_other_uids=0 

Чтобы установить значение SYSCTL.

Теперь пользователи, кроме root, могут просматривать только свои процессы. Таким образом, ввод пароля в командной строке менее рискован.

Кроме того, как работает crontab? Вы добавили его к корневым пользователям crontab с помощью crontab -e -u root, или вы добавили его в/etc/crontab?

Убедитесь, что правильные разрешения установлены на .my.cnf, а также какие переменные среды заданы crontab, поскольку это может привести к тому, что он будет выглядеть в другом месте, чем ваш домашний каталог (который для root на FreeBSD есть/корень).

2

Я просто столкнулся с этим.

Похоже, что MySQL жестко запрограммирован на поиск '~/.my.cnf' вместо чего-то типа $ HOME/.my.cnf.

На FreeBSD, cronjobs вызывается из/и т.д./кронтаб будет игнорировать тильда «~» характер, и, следовательно, будет игнорировать значение как ~/.my.cnf

В самом деле, следующее не работает мне вообще:

MySQL --defaults-экстра-файл = ~/.my.cnf

Однако, используя переменную $ HOME делает работу:

HOME =/дом/админ MySQL - -defaults-экстра-файл = $ HOME/.my.cnf

В качестве альтернативы мой cronjob будет работать, если я переведу его из/etc/crontab в/var/cron/tabs/root (используя 'crontab -e' как root).

Смежные вопросы