Как я могу заставить mysqldump использовать учетные данные из mysql_config_editor в исполняемом скрипте crontab?

Я настраиваю ежедневное резервное копирование базы данных 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 скрипт успешно использовать указанные мной учетные данные?

1
задан 10 January 2014 в 23:10

2 ответа

То, что вам нужно сделать, это установить строку расписания следующим образом

HOME=/root
# m     h       dom     mon     dow     user   command
15      0       *       *       *       root   /home/username/mysqldump-daily

Обратите внимание на столбец «пользователь». Также добавьте запись HOME перед ней для всего, что имеет отношение к вашему логину-пути

0
ответ дан 10 January 2014 в 23:10

У меня была такая же проблема с mysqldump 5.7.13 в скрипте, запущенном crontab. Вы можете установить местоположение файла .mylogin.cnf с помощью переменной среды MYSQL_TEST_LOGIN_FILE перед вызовом команды mysqldump:

export MYSQL_TEST_LOGIN_FILE=/root/.mylogin.cnf
mysqldump --login-path=mysqldump [...]
0
ответ дан 10 January 2014 в 23:10

Другие вопросы по тегам:

Похожие вопросы: