Я настраиваю ежедневное резервное копирование базы данных MySQL 5.6.14 с помощью mysqldump на сервере Ubuntu 12.04 Precise.
Я создал файл учетных данных в корневом домашнем каталоге (.mylogin.cnf) в соответствии с инструкциями для mysql_config_editor.
Затем я создал сценарий оболочки для выполнения резервного копирования:
#!/bin/bash
echo "$(date +'%Y%m%d %k%M%S'): Starting daily backup." >> /path/to/backup/dump.log
/opt/mysql/server-5.6/bin/mysqldump --login-path=localroot --databases mydatabase --single-transaction > /path/to/backup/daily.sql 2>> /path/to/backup/dump.log
echo "$(date +'%Y%m%d %k%M%S'): Finished daily backup." >> /path/to/backup/dump.log
(это был скрипт chmod 755.)
Если я выполняю этот сценарий от имени пользователя root, он работает как положено .
Я создал запись crontab в crontab корня, используя sudo crontab -e
:
# m h dom mon dow command
15 0 * * * /home/username/mysqldump-daily
Проблема в том, что выходной журнал (dump.log) показывает, что скрипт пытался использовать неверные учетные данные:
mysqldump: получена ошибка: 1045: доступ запрещен для пользователя 'root' @ 'localhost' (используется пароль: НЕТ) при попытке подключения
Достаточно сказать, мой root Пользователь не имеет имени root, поэтому я знаю, что он не использует учетные данные, хранящиеся в файле .mylogin.cnf
, и при этом он не использует действительную учетную запись пользователя root.
Я не уверен, почему это происходит, но я подозреваю, что это как-то связано с тем, что cron не имеет доступа к домашнему пути пользователя root или что он выполняет скрипт от имени другого пользователя. Я думал, что редактирование crontab рута (вместо того, чтобы поместить скрипт, например, в /etc/cron.daily/
, который я пробовал) будет работать.
Я не хочу включать пароль в скрипт по понятным причинам, поэтому я пытаюсь использовать зашифрованный файл.
Как я могу заставить выполненный cron скрипт успешно использовать указанные мной учетные данные?
То, что вам нужно сделать, это установить строку расписания следующим образом
HOME=/root
# m h dom mon dow user command
15 0 * * * root /home/username/mysqldump-daily
Обратите внимание на столбец «пользователь». Также добавьте запись HOME перед ней для всего, что имеет отношение к вашему логину-пути
У меня была такая же проблема с mysqldump 5.7.13 в скрипте, запущенном crontab. Вы можете установить местоположение файла .mylogin.cnf с помощью переменной среды MYSQL_TEST_LOGIN_FILE перед вызовом команды mysqldump:
export MYSQL_TEST_LOGIN_FILE=/root/.mylogin.cnf
mysqldump --login-path=mysqldump [...]