Назад | Перейти на главную страницу

Нужно ли мне добавлять sudo для команды mysqldump для сценария резервного копирования MySql

Я пытаюсь написать сценарий резервного копирования 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.