Простий скрипт бекапа (на прикладі freebsd) - # записки про unix

Резервування поділю на два види - це підвищення надійності за допомогою RAID масивів і надмірне резервування. Зазначу, що обидва підходи повинні застосовуватися на ВАЖЛИВИХ серверах (в кращому випадку - на будь-яких серверах). RAID, наприклад 1 - дзеркало, врятує від відмови одного з HDD, якщо файл сервер з великим кількість HDD, то бажаніше застосовувати або RAID 10 або RAID 6 (за подробицями в википедию). Тобто за короткий термін витягаємо пошкоджений HDD. вставляємо новий синхронізуємо і продовжуємо працювати, наявність HotSwap кошиків в даному випадку дуже бажано. Від чого не врятує RAID. так це від людського фактора. Наприклад взяли і видалили файл, схаменулися, а його вже немає або пошкодили дані і т.д. Для цього необхідна система надлишкового резервування важливої ​​інформації, на сервері в основному це конфігураційні файли, бази даних MySQL. У підсумку маємо, як мінімум 3 HDD, з двох збираємо RAID1 (дзеркало) і ОКРЕМИЙ HDD - під бекапи важливих файлів. Звичайно, це не обов'язково, це лише моя точка зору, моя думка.
Сам скрипт бекапа backup.sh нескладний, виглядає наступним чином:

DIR = / mnt / backup
DATA = `date '+% Y% m.'`

cd $ DIR
mysqldump -u root --password = '*****' -l --all-databases | gzip> databases- $ DATA.sql.gz
tar -czf named- $ DATA.tar.gz / var / named
tar -czf log- $ DATA.tar.gz / var / log
tar -czf etc- $ DATA.tar.gz / etc
tar -czf locetc- $ DATA.tar.gz / usr / local / etc
tar -czf www- $ DATA.tar.gz / usr / local / www

find $ DIR / * -mtime +7 -exec rm <> \;

Всі довгі команди mysqldump і mail повинні бути написані в один рядок.
DIR - директорія з резервних копій.
DATA - поточна дата у форматі ГОДМЕСЯЦДЕНЬ.
Далі по скрипту переходимо в директорію з резервних копій (cd $ DIR) і виконуємо послідовно команди архівірующіі всі бази даних mysqldump ключ --all-databass. -l - лочіт бази на час виконання дампа, ключ --password = '*****' - замість зірочок вказуємо пароль, тому що він у відкритому вигляді, права на файл backup.sh робимо 700. тобто читання, редагування і виконання - тільки root користувачеві. Далі стискаємо отриманий дамп gzip (повинен бути присутнім в системі) і перенаправляємо в файл databases- $ DATA.sql.gz. Далі йдуть команди tar -czf. якими створюємо архіви потрібних директорій (можете включати будь-які свої). На цьому власне сам скрипт, який виконує бекапи закінчується, наступна секція для зручності або точніше для контролю виконання архівування. Тобто після вдало виконаного скрипта, дивимося з'явилися в директорії файли в імені якого значиться поточна дата, якщо такі файли є - записуємо їх в файл current. який зчитуємо в тіло листа і відправляємо на мило адміністратору, далі видаляємо тимчасовий файл current, тобто ось ця секція:

Ну і остання команда:

find $ DIR / * -mtime +7 -exec rm <> \;

тобто зберігаємо файли архівів в / mnt / backup - 7 днів.

Щоб бекап виконувався кожен день в 00:05, додаємо завдання в кронтаб #crontab -e.

# Backup
5 0 * * * /root/script/backup.sh

УВАГА! #crontab -e - це файл завдань root користувача. Часто можна бачити теми, в яких йдеться приблизно наступне: "Додаю команди в кронтаб, а вони не виконуються" або "Додаю скрипт в кронтаб, а він не виконується, хоча з консолі ./backup.sh виконується нормально". Вся справа в тому, що треба в #crontab -e прописати змінні оточення, тобто додати наступні рядки в самий верх файлу:

Після чого команди в скриптах можуть бути написані в скороченому вигляді. Якщо цих рядків немає, то команди треба писати повністю, например не mysqldump. а / usr / local / bin / mysqldump, що не зовсім зручно. Я в кронтаб додаю рядок MAILTO =, тобто всі помилки при виконанні скрипта по крону, падають мені на мило.


На цьому все.
матеріал підготував
Бешкетник Олег aka H @ wk!