Ответ 1
Используйте параметр --defaults-extra-file
, чтобы указать, где найти файл .my.cnf
(при условии, что он доступен для чтения любым пользователем, работающим под управлением mysqldump
.
Я попытался сделать резервное задание 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
, и это работает как прелесть.
Используйте параметр --defaults-extra-file
, чтобы указать, где найти файл .my.cnf
(при условии, что он доступен для чтения любым пользователем, работающим под управлением mysqldump
.
Thats weird на самом деле cron должен читать .my.cnf. Как запустить cronjob в /etc/crontab или crontab -e? Вы можете попробовать использовать AutoMySQLBackup, который представляет собой небольшую оболочку script с помощью mysqldump.
Я тоже столкнулся с этим.
Похоже, что 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).
В 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).