Безопасное задание резервного копирования MySQL cron - my.cnf не читается - PullRequest
11 голосов
/ 02 марта 2009

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

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

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

Можно ли как-то обойти это, не вводя имя пользователя и пароль в саму команду (поскольку это небезопасно)?

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

Ответы [ 4 ]

18 голосов
/ 02 марта 2009

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

2 голосов
/ 21 мая 2009

Я тоже столкнулся с этим.

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

В FreeBSD cronjobs, вызываемые из / etc / crontab, будут игнорировать символ тильды '~' и, следовательно, игнорировать значение типа ~ / .my.cnf

На самом деле, у меня совсем не работает:

mysql --defaults-extra-file = ~ / .my.cnf

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

HOME = / дом / админ mysql --defaults-extra-file = $ HOME / .my.cnf

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

2 голосов
/ 02 марта 2009

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

0 голосов
/ 02 марта 2009

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

security.bsd.see_other_uids=0

Чтобы /etc/sysctl.conf и перезагрузиться, или используйте

sysctl security.bsd.see_other_uids=0

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

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

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

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

...