bash скрипт резервного копирования файлов

Резервное копирование с ротацией бэкапов. Bash скрипт

bash скрипт резервного копирования файлов. big b6fda0aa1b3f2575ad60b11d718249f1. bash скрипт резервного копирования файлов фото. bash скрипт резервного копирования файлов-big b6fda0aa1b3f2575ad60b11d718249f1. картинка bash скрипт резервного копирования файлов. картинка big b6fda0aa1b3f2575ad60b11d718249f1. В прошлой статья было рассмотрено упрощенный вариант бэкапа сайта с возможностью загрузить бэкап на сервер FTP.

В прошлой статья было рассмотрено упрощенный вариант бэкапа сайта с возможностью загрузить бэкап на сервер FTP.

Со временем у меня возникла потребность сделать более улучшенную версию скрипта для создания бэкапа всего сервера (файлы нескольких сайтов и их БД ), а также загружать на FTP все это хозяйство c помощью cURL, так как на сервере не было установлен FTP клиент и установить его не было возможности. Также нужно было удалять на FTP сервере старые бэкапы, чтобы не засорялось место на диске.

Бэкап сайтов и Баз Данных

Начнем с настроек. Укажем доступы к БД под которыми будем архивировать Базу Данных:

Зададим путь к каталогу в котором будем архивировать данные с сайтами и куда будем сохранять временные архивы, до выгрузки на FTP:

Далее устанавливаем текущую дату, чтобы помечать бэкапы и было понятно за какой день они сделаны:

Указываем путь к бинарникам:

Теперь создадим в директории для бэкапов BACKUP временную директорию с текущей датой, туда будем складывать промежуточные архивы с БД и с файлами сайтов, перед тем как загрузим их в общий архив.

Далее сохраняем в переменную LS список всех сайтов из указанной нами директории SITEDIR, чтобы поочереди их заархивировать.

Синтаксис «$(. )» указывает что нам нужно выполнить команду внутри скобок и результат выполнения присвоить переменной LS. После этого проходим по директориям циклом в котором сначала переходим в эту директорию, а потом архивируем содержимое. В директорию мы заходили для того чтобы были короткие пути в архивах вида:

После того как мы загнали все сайты в отдельные архивы, нужно теперь их заархивировать в один общий архив для данных сайта.

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

В итого у нас получился один архив с данными (файлами) сайтов который покуда лежит в директории ARCHIVESITE. К нему чуть попозже вернемся когда будем загружать бэкапы на FTP.

Переходим дальше к бэкапам Баз Данных.

Изначально подключаемся к MYSQL и просим показать нам список всех БД у данного пользователя. После этого пройдемся циклом по этим базами и заархивируем их и сложим в директорию BACKUP/NOW

Также мы можем отсечь не нужные нам БД, например information_schema которые являются служебными и содержимое их нас не интересует.

Собираем все архивы с БД в один общий и добавляем дату бэкапа

Директорию NOW (и все что в ней есть) можно удалять она нам больше не нужна:

После всего этого у нас осталось два архива с файлами и данными:

Загрузка данных на FTP

Теперь все это дело нужно загрузить как то на FTP, для этих целей мы будем использовать cURL.

Начнем опять же с настроек:

Задаем количество бэкапов которое нужно сохранять на FTP:

Указываем путь к curl:

Дальше переходим в каталог с нашими бэкапами:

И загружаем их на FTP в указанную в настройках директорию:

Для удаления лишних бэкапов (которым более 5 дней) запрашиваем список всех файлов в директории на FTP:

Перебираем все файлы в цикле и смотрим чтобы это были файлы типа server-.tar.gz и mysql-.tar.gz. Если дата не совпадает с разрешенной (последние N дней и 1 число последних N месяцев) мы их удаляем:

И очищаем директорию BACKUP:

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

Источник

Как делать автоматические бэкапы сервера в Облачном хранилище

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

Есть много различных инструментов для работы с объектными хранилищами, например:

В данной инструкции приведен пример создания скрипта, который будет регулярно запускать консольный клиент, архивировать и переносить важные данные в объектное хранилище — Облачное хранилище.

Требования для выполнения примера

В качестве консольного клиента используем S3cmd с инструментом для автоматизации crontab.

Для начала работы потребуется:

Создание скрипта для резервного копирования

В данной инструкции рассмотрим создание базового bash-скрипта, который создает резервную копию файла или каталога с помощью tar и далее загружает эту резервную копию в Облачное хранилище с помощью утилиты командной строки s3cmd.

Откройте на своем сервере домашнюю директорию:

С помощью редактора nano создайте пустой файл, например, с именем bkupscript:

Начните писать скрипт резервного копирования в текстовом редакторе с шебанга. Шебанг — это директива интерпретатора, которая позволяет запускать скрипты или файлы данных как команды и выглядит как последовательность из двух символов: решетки и восклицательного знака. Включая шебанг в начало скрипта, мы говорим оболочке запускать команды файла в bash.

Назначение переменных

Добавьте в скрипт переменные прямо под шебангом в верхней части текстового файла:

Вывод сообщений

Добавьте функцию showhelp в скрипт резервного копирования для вывода сообщений в случае сбоя работы скрипта:

Сбор файлов

Прежде чем скрипт сможет передавать что-либо в выбранное пространство, ему сначала необходимо собрать нужные файлы и объединить их в единый пакет, который мы можем загрузить. Это выполняется с помощью утилиты tar, условных операторов и функции tarandzip:

Когда вызывается инструкция if, скрипт выполняет команду tar и ожидает результата. Если команда выполнена успешно, будут выполнены строки после оператора then:

Часть else этого скрипта будет выполняться только в том случае, если команда tar обнаружит ошибку при выполнении:

Завершенная функция tarandzip будет выглядеть так:

Перенос файлов в объектное хранилище

Добавим в скрипт резервного копирования функцию передачи файла movetoSpace в выбранное пространство с помощью команды s3cmd. Используем s3cmd и переменные, которые мы объявили ранее, для создания команды, которая будет помещать файлы резервных копий в выбранное пространство:

Добавьте уведомления о том, что процесс переноса файлов начался:

Поскольку команда будет либо успешной, либо неудачной (это означает, что она либо загрузит файлы в выбранное пространство, либо нет), можно сообщить пользователям, сработала ли она, повторив одну из двух строк, содержащихся в if/then/else, например:

В целом функция movetoSpace должна выглядеть так:

Настройка управления потоком

Предполагая, что скрипт настроен правильно, он при запуске должен прочитать команду ввода, присвоить значения из нее каждой переменной, выполнить функцию tarandzip, а затем выполнить функцию movetoSpace.

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

Мы можем упорядочить отлов ошибки, добавив в конец файла условную инструкцию if / then / else:

Первый оператор if в приведенном выше разделе проверяет, что третья переданная переменная не пуста. Это происходит следующим образом:

Пример скрипта

Завершенный скрипт выглядит следующим образом:

После проверки скрипта закройте файл сочетанием клавиш CTRL+Х и сохраните внесенные изменения клавишей Y+ENTER перед выходом из nano.

Автоматизация резервного копирования с помощью Crontab

Настройте задание cron, которое будет использовать скрипт для регулярного резервного копирования в выбранное пространство. В рамках этого примера резервное копирование будет выполняться каждую минуту.

Сделайте скрипт исполняемым:

Отредактируйте файл crontab, чтобы скрипт запускался каждую минуту:

Можно выбрать nano по умолчанию или любой другой текстовый редактор.

Перейдя в crontab, добавьте следующую строку внизу скрипта:

Закройте файл сочетанием клавиш CTRL+Х и сохраните внесенные изменения клавишей Y+ENTER.

Если оставить задание cron запущенным без каких-либо изменений, новый файл будет копироваться в выбранное пространство каждую минуту. Убедившись, что cron работает успешно, перенастройте crontab для резервного копирования файлов с нужным интервалом.

Источник

BASH скрипт резервного копирования

bash скрипт резервного копирования файлов. backup large. bash скрипт резервного копирования файлов фото. bash скрипт резервного копирования файлов-backup large. картинка bash скрипт резервного копирования файлов. картинка backup large. В прошлой статья было рассмотрено упрощенный вариант бэкапа сайта с возможностью загрузить бэкап на сервер FTP.

При проблемах с сайтом или хостингом администратор проекта должен иметь возможность быстро вернуть сайт в рабочее состояние. Для этих целей можно периодически создавать дубликат данных сайта: файлов и базы данных. Этот процесс называется резервным копированием, или бэкапом. При наличии бэкапа администратор сайта в любой момент вернёт работоспособность сломанного сайта или, в некоторых случаях, перенесет сайт на другой сервер.

Многие хостинги предлагают собственный функционал для создания копии сайта и почти всегда за это взимается плата (за создание копии или за хранение копии на сервере). Но процесс резервного копирования можно сделать бесплатным и использовать только встроенные возможности сервера без стороннего программного обеспечения.

В этой статье будет написан скрипт для выполнения всей рутинной работы по резервному копированию.

Создадим файл с расширением «.sh», например «backup.sh» и в самом начале файла на первой строке напишем обязательную строку:

Чтобы этот скрипт можно было запустить, необходимо присвоить ему права на исполнение. Для этого на хостинге через файловой менеджер зайдите в свойства созданного файла backup.sh и установите соответствующие права на исполнение файла.

Конфигурация скрипта

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

Комментарии перед каждым параметром поясняют его предназначение. Остановимся лишь на некоторых строках.

Комментарии в коде

При написании скрипта рекомендуем сопровождать каждое действие комментарием после символа «#». Если захотите улучшить скрипт через год-два, то комментарии помогут вспомнить как работает код и за что отвечает каждая строка.

Cоздание папки для бекапа

Команда Echo

Создание архива файлов:

Для создания архива нужно перейти в папку с файлами командой «cd», иначе файлы в архиве будут расположены с той же структурой, как на сервере, начиная с домашней директории, например, «/home/u/username/mysite.ru/public_html»

Если вы решили исключить папку с ядром, то после ключа «-x» добавьте пробел и вставьте «’concrete/*’», таким образом строка для создания архива изменится:

Создание дампа базы данных

Прописываем команду для создания дампа базы:

Завершение скрипта

Запуск скрипта:

— Запуск вручную: введите в консоль «./backup.sh» и нажмите «Enter»

— Запуск через cron: для этого на всех хостингах есть специальный раздел с настройкой CRON.

Безопасность

В начале скрипта в разделе с конфигурацией мы прописали полные данные для подключения к базе. Если всё оставить как есть, то это угрожает безопасности вашего сайта. Дополнительно выполним действия, чтобы злоумышленники не могли получить доступ к файлу.

Код скрипта

Объединим весь написанный код в одном месте.

От автора

Этот скрипт выполняет простую задачу: создаёт файлы, чтобы сломанный по каким-то причинам сайт можно было вернуть в рабочее состояние. Вы можете взять за основу этот bash-скрипт и дополнить его своим кодом под ваши потребности: настроить выгрузку копий на внешний FTP-сервер, удалять старые неактуальные копии. Для написания bash-скриптов в Интернете можно найти множество мануалов с готовыми кусками кода.

Источник

Бэкап данных с btrfs и LVM bash скриптами

bash скрипт резервного копирования файлов. ce059a2f04e49e6b79d79c60a9126abd. bash скрипт резервного копирования файлов фото. bash скрипт резервного копирования файлов-ce059a2f04e49e6b79d79c60a9126abd. картинка bash скрипт резервного копирования файлов. картинка ce059a2f04e49e6b79d79c60a9126abd. В прошлой статья было рассмотрено упрощенный вариант бэкапа сайта с возможностью загрузить бэкап на сервер FTP.

Уже было много постов о резервном копировании, особенно много для ОС Linux. Озаботился и я настройкой резервного копирования.
Требовалось создавать бэкапы системы, данных с примонтированного раздела и LVM томов (диски виртуальных машин). Были мысли использовать Bacula, т.к. знаком с ней, но поскольку дома только 1 компьютер клиент-серверная архитектура только создавала бы дополнительные сложности при восстановлении в случае повреждения системы. Значит систему и данные просто копируем, образ LVM раздела создаем с помощью dd. Хотелось делать резервную каждый день (хотя бы данных) и хранить минимум 14 дней. Но поиски готовых и простых решений, удовлетворяющих всем потребностям не увенчались успехом. А значит берем в руки bash и пишем свой велосипед. В этой статье я делюсь тем, что вышло.

Disclaimer: при написании скриптов не было цели написать монстров, которые делают все. Нужен был простой и надежный способ бэкапа. Буду благодарен за указание неточностей и узких мест скриптов (тех, где могут возникнуть ошибки). Статья рассчитана больше на новичков в Linux, которые ищут готовое решение и на лентяев, 🙂 которым лень писать самим.

Исходные условия:

Итак, скрипт № 1, создает копию файлов корневого раздела в /mnt/backup/root/«номер дня»/.

Скрипт № 2, создает снапшоты корневой ФС (скрипт логикой очень похож на 1й, поэтому комментировать буду только отличия). Снапшот имеет имя auto_«номер дня».

Скрипт № 3, создает копию LVM тома:

Поскольку скрипты, бэкапящие данные из /mnt/data аналогичны скриптам 1 и 2 думаю, нет необходимости их писать.

Добавляем в crontab и определяем, как часто создавать бэкапы (в моем примере бэкап создается раз в неделю, снапшоты раз в день).

Что еще можно прикрутить:

UPD. По совету onix74 подправил скрипты.

Источник

bash: Бэкап без лишнего ПО

Бэкап важной информации — каждый системный администратор сталкивается с такой задачей. Задача казалось бы тривиальная и у многих читателей интереса не вызовет. Но, например, мне бы такая статья в определенный момент помогла бы весьма сильно, поэтому считаю, что этой статье быть.

Задача: Бэкап данных в локальную директорию и на отдельный сервер, с использованием минимума стороннего ПО, логированием и оповещением администратора в jabber при сбоях. Все основные функции большинства ПО для автоматического бэкапа, но без установки оного, а следовательно без его багов (что, собственно, и привело к подобной идее).

А теперь к делу.

Для начала создадим и откроем скрипт

Теперь в скрипте добавим строку

Объявим некоторые переменные.
TN — TASKNAME — имя задания.Используется для вывода в лог и определения названия файла.
Так как заданий несколько (ежемесячное, еженедельное, ежедневное) и писать на каждый случай скрипт было лень, я создал универсальный, в котором надо просто раскомментить нужные строки. Наименование заданий писать надо без пробелов, желательно в латинице, если не хотите проблем с кодировкой и неправильными параметрами команд.

OF — Output File — имя выходного файла. Получается из переменной TN, то есть имени задания.

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

Сделаем запись в лог о начале бэкапа (дата, время, имя задания)

Заменяем стандартный разделитель своим

SRCD — SouRCe Directory — каталог с данными для бэкапа
Теперь можно перечислять несколько каталогов, разделителем будет перенос строк как мы сами указали строкой выше

TGTD — TarGeT Directory — каталог в который будут складываться бэкапы

Естественно мы понимаем что хранить важные бэкапы только на источнике как минимум легкомысленно. Поэтому оставим копию и на удаленном ресурсе, который будем отдельно монтировать с помощью mount и fstab. Сразу поясню почему я использовал mount и fstab, а не один mount — я монтирую этот каталог и в других своих скриптах, а как сказал один из знакомых программистов — хороший программист не будет писать один и тот же код дважды (как-то так, дословно не помню, но надеюсь смысл донес).

Сам процесс архивирования в варианте «Создать новый архив»

и в варианте «Обновить файлы в старом архиве»

В переменной «?» ханится статус выполнения последней команды. Сохраним его, чтобы воспользоваться позже.

Возвращаем стандартный разделитель к исходному значению

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

В процессе мы копируем архив из локального хванилища в удаленное. Естественно, проверяем, что каждая операция успешно завершена, и пишем все в логи.
Для отсылки сообщения администратору я использую XMPP сообщение, так как в организации поднят Jabber-сервер, и я больше люблю получить быстрое сообщение о сбое, чем лезть в почту, вбивая пароли, тыкая на ссылки, и ожидая пока браузер мне все отобразит. В любом случае никто не мешает вам использовать sendmail вместо sendxmpp.
Файл /usr/local/etc/XMPP_settings следующего содержания:

В файле fstab строка описывающая подключение шары Windows

Теперь осталось только добавить задание в cron. Это можно сделать с помощью файла /etc/crontab, но я, в силу привычки к GUI, оставшейся в наследство от виндовс, пользую вэб-интерфейсы для таких случаев. Команда должна выполняться с правами рута, то бишь, к примеру, sudo bash backup_script. Добавляя команду в cron можно определить что она будет сразу выполняться от имени root`а

В ходе обсуждений затронули проблему разрастания логов. Пошел по простейшему (на мой взгляд) пути: будем хранить только последние N строк лога, например 300. В скрипт добавятся две строки, в которых мы сохраним последние 300 строк лога во временный файл, потом затрем им лог

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *