Безопасное создание резервной копии cron - my.cnf не читается

Я попытался сделать резервное задание 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, и это работает как прелесть.

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

В FreeBSD cronjob, вызываемые из /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).

Ответ 4

В 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).