5

У меня есть два компьютера, мой локальный и удаленный. Я хочу сделать резервную копию удаленного сервера с помощью команды tar через ssh, но сохранить файл tar на локальном компьютере. Является ли это возможным?

2 ответа2

3

Вот два примера того, что я делаю: один для файлов и один для MySQL. Оба являются решениями тяги; ваш локальный компьютер входит в удаленный компьютер и получает файлы. Однако локальный компьютер сообщает удаленному компьютеру подготовить архив.

Настройка и фон

Я использую crontab и аутентификацию без пароля с ssh для архивирования и gzip на удаленной машине, а затем направляю вывод gzip на локальную машину через ssh. Убедитесь, что crontab и аутентификация без пароля настроены. У меня также есть некоторые очистки однострочники.

Преимущество в том, что он использует пропускную способность наиболее эффективно. Недостаток в том, что он более ресурсоемкий, хотя на современном оборудовании я сомневаюсь, что это важно, если вы не имеете дело с нелепо большими файлами.

Резервное копирование файлов и каталогов

Вероятно, это та часть, которая вас волнует. Скажите ssh выполнить tar и передать gzip на удаленную машину. Пусть gzip запишет сжатый файл в стандартный вывод (флаг c ) и направит вывод в файл на вашем локальном компьютере.

00 00 * * * /usr/bin/ssh login@host "sudo tar -cf - -C /path/to/directory/to/backup/ file_to_back_up | gzip -9c" > /file/on/local/machine/BackUp_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).tar.gz

Важно: file_to_back_up - это файл, который вы на самом деле создаете; это может быть файл или каталог. Это может быть также ряд файлов: file1.txt, file2.php и т.д.

Флаг 9 - максимальное сжатие gzip.

-cf - флаги и параметр создают новый архив и выводят данные на стандартный вывод. Флаг -C указывает tar запускаться из другого каталога, чем текущий. file_to_back_up может быть файлом или каталогом. Это удерживает множество посторонних относительных путей из архива. Если вы хотите сделать резервную копию чего-либо в вашем домашнем каталоге, я думаю, вы можете опустить -C /path/to/directory/to/backup/ потому что ssh по умолчанию зарегистрирует вас в вашем домашнем каталоге.

date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A сгенерирует отметку времени, например 2015-03-19-08h58m09s_Thursday

Столбцы crontab 00 00 * * * основном означают полночь каждый день.

Резервное копирование базы данных MySQL

Похоже на вышесказанное. Предостережение заключается в том, что вы должны убедиться, что ваш доступ к MySQL может быть также без пароля; безопасный способ сделать это с помощью файлов .cnf. Пропустите этот раздел, если вы не используете MySQL, но концепция может быть перенесена на другие инструменты.

30 0,13 * * * /usr/bin/ssh user@remote.host "mysqldump --defaults-file=.my.database.cnf -uroot databasename | gzip -9c" > /path/to/databasebackup_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).sql.gz

Файл .cnf содержит учетные данные для входа, поэтому вам не нужно передавать их оболочкой, чтобы они отображались в ps для просмотра другими пользователями. Он должен содержать:

[client] user=mysqluser password=yourpassword host=localhost

В зависимости от ваших настроек, вы можете захотеть их несколько для разных проектов / баз данных. Если нет, то по умолчанию используется .my.cnf.

Безопасность: вы, вероятно, хотите выполнить chmod 600 *.cnf чтобы только владелец мог читать и писать в этот файл.

уборка

Я склонен автоматически удалять резервные копии старше пяти дней с помощью команды find , если они не выпадают в пятницу. Я архивирую пятницу дольше. Вот почему я включаю день недели в свои имена файлов.

2

да, несколько примеров:

tar cvjf - * | ssh user@host "(cd /desired/path; tar xjf -)"
tar cvzf - dir/ | ssh user@host "cat > /backup/dir.tar.gz"
tar cvzf - dir/ | ssh user@host "dd of=/backup/dir.tar.gz"
ssh user@host "cat /backup/dir.tar.gz" | tar xvzf -
tar cvjf - * | ssh root@host "(cd /desired/path; tar xjf - )"

Для резервного копирования удаленного компьютера и сохранения tar на локальном компьютере

ssh user@host "(cd /desired/path; tar cvzf - *)" > /path/to/backup.tar.gz

другие примеры использования: https://blog.bravi.org/?p=259

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .