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

Сценарий удаленного резервного копирования SSH + MysqlDump

Я пытаюсь выполнить удаленную команду mysqldump, перенаправить stdout в файл dmp, а затем запустить tar.

Я немного запутался в том, как делать биты перенаправления по ssh:

т.е.

ssh user@host.com mysqldump $dbname -u admin -p > dbdump.dmp && tar cvzf dbdump.tar.gz dbdump.dmp

Вопросы:

1) Я не предоставляю пароль, потому что хочу, чтобы он подсказал мне. Сможет ли с этим справиться удаленная команда ssh? 2) Что с синтаксисом? Я хочу использовать цитаты или нет? Что происходит с перенаправлениями и каналами? Должны ли они быть экранированы или отформатированы каким-то особым образом.

Когда вы подключаетесь к другому хосту, SSH выполняет заданную команду на стороне сервера (если ничего не задано, запускает оболочку), перенаправляя все потоки stdin / stdout / stderr. В ssh команда заканчивается в >. Это означает, что вывод команды mysql перенаправляется в файл dbdump.dmp на стороне клиента. Затем, все еще на стороне клиента, из этого файла создается tar-архив.

Если вы поместите всю командную строку в кавычки, как предлагает Dom, она будет полностью запущена на удаленной стороне, таким образом у вас будут файлы на вашем сервере.

Теоретически, пароль тоже должен работать (поскольку поток stdin не перенаправляется, а просто передается), но здесь этого не произошло.

Вы можете ввести пароль в .my.cnf (если вам нужна дополнительная безопасность, создайте дополнительного пользователя только для резервного копирования). Вы также можете использовать логин с открытым ключом для этой учетной записи, таким образом он будет работать полностью без вашего участия.

BTW: Почему вы создаете tar-архив дампа? Если вам нужно только сжатие, gzip или чего-то подобного вполне достаточно.

На каком компьютере вы хотите запустить tar? если он находится на сервере, вам нужно процитировать всю строку, например: ssh user@host.com "mysqldump $dbname -u admin -p > dbdump.dmp && tar cvzf dbdump.tar.gz dbdump.dmp" Если вы этого не сделаете, я думаю, что конец строки будет выполняться локально и не будет работать, поскольку у вас нет файла dbdump. Для 1) нет проблем. Если потребуется пароль, он будет запрошен. [EDIT] OOPS, я дважды проверяю, вы говорите о пароле MySQL, а не SSH! Однако я думаю, что его спросят [EDIT2] Просто проверьте, работает ли он с кавычками: сначала запрашивается пароль SSH, а затем пароль MySQL

Это сработало для меня (после нескольких тестов):

ssh -t kom "mysql -uroot -p -e 'show databases;'"
ssh -t kom "mysql -uroot -p < /home/ling/websites/jin_test/.deploy/tmp.sql"

«Уловкой» были кавычки вокруг команды.

В -t опция позволяет запрашивать пароль в интерактивном режиме через удаленную оболочку.

В ком вот только идентификатор конфигурации ssh, определенный в моем ~ / .ssh / config файл (подробнее см. здесь: https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/).