Я пытаюсь написать сценарий резервного копирования mysql для cron. Используя сервер Ubuntu.
Текущий код выглядит следующим образом:
#!/bin/sh
mysqldump -u root --all-databases > /root/all_databases_backup-`date +%A`.sql
Нужно ли мне добавлять sudo перед mysqldump, например:
#!/bin/sh
sudo mysqldump -u root --all-databases > /root/all_databases_backup-`date +%A`.sql
Причина, по которой я спрашиваю, заключается в том, что когда я запускаю mysql / mysqldump в оболочке, всегда отображается сообщение Permission denied. Мне нужно sudo, чтобы пройти.
Так требуется ли команда в сценарии sudo?
Спасибо.
В mysqldump
команда не требует sudo
, но сохраняя файл дампа в /root
папка требует прав root. Итак, вам нужно запустить свой скрипт, используя sudo
.
Вы также можете отметить, что выполняется следующая команда:
sudo mysqldump -u root --all-databases > /root/all_databases_backup-`date +%A`.sql
даст твой доступ запрещен ошибка. Это связано с тем, что перенаправление вывода по-прежнему выполняется не от имени пользователя root, а только в части дампа.
mysqldump
потребуется пароль для пользователя mysql корень. Если вы не укажете этот пароль, он не сработает, sudo
или нет sudo
.
mysqldump
могу посмотреть на твой .my.cnf
файл, чтобы получить пароль, и он получит его от пользователя бег то mysqldump
команда. Итак, если Linux корень у пользователя есть .my.cnf, настроенный с паролем, тогда да, sudo
поможет. Однако если mysql корень у пользователя есть пароль, и он не настроен ни в одном .my.cnf
тогда sudo
не поможет.
Вы можете добавить mysql корень пользователь и пароль для вашего собственного пользователя .my.cnf
и тогда тебе не нужно sudo
либо, но это угроза безопасности.
Как указывают и другие ответы, вам может потребоваться sudo
записать вывод где-нибудь, что корень (Linux, а не mysql) владеет.
Наконец, вы не говорите нам, какой пользователь выполняет сценарий, если он находится в кореньcrontab (например), затем sudo
в этом нет необходимости, хотя вам все равно может понадобиться .my.cnf
предоставить пароль.
Если ваш mysql корень у пользователя не установлен пароль, тогда единственная проблема - это запись вывода, и в этом случае sudo
требуется, если вы не запускаете сценарий как корень.
Если вы запускаете скрипт как root (например, как скрипт в /etc/cron.daily
), то вам не следует использовать sudo в скрипте независимо от всех вышеперечисленных комментариев.
В вашем случае вам нужно sudo для записи в папку / root /. Если вы можете выгрузить базу данных в любую другую папку с правильными разрешениями (или изменить разрешения для / root - не рекомендуется), вы можете использовать ее без sudo.