Бърз и лесен начин за автоматичен бекъп на бази данни.

Всичко за ГНУ/Линукс. Програмиране на c/c++, java, perl, python, jquery, ruby, bash, php, mysql, css, html и други компютърни неща.

Бърз и лесен начин за автоматичен бекъп на бази данни.

Postby NullByte » June 30th, 2013, 9:40 pm

За какво е тази статия?

Много често най-важната информация на нашия сървър е базата данни. Останалото лесно можем да го възстановим или
да правим рядко копия, защото съдържанието и данните се променят рядко.

Нещата с базата данни обаче са по-различни. Има много начин да я загубим и колкото по-рядко правим бекъп, толкова
по-голям е шанса той да е стар. А за хора, които ползват блогове и форуми това би било огромен кошмар и главоболие.

Не само, че всеки ден е от значение, но и всеки час. Представете си само разочарованието на някой ваш потребител, когато разбере, че темата
или статията, която е писал/а толкова дълго и старателно е безвъзвратно изгубена? Или пък същото да сполети ваша хубава статия в блога ви? Ад.

Написах скриптове и тази статия, в която ще се спрем на един начин, до който аз достигнах, а вероятно и хиляди други, за автоматизацията на бекъп на базите данни.
Забранявам да се копира без мое разрешение, както и части от нея или кода - тя е само за форума на Fewona.

Какво ни е нужно?

Всичко е много лесно и просто, за постигането на целите ни се нуждаем от:

- VPS сървър, на който е нашата база данни (сайтче, блогче или форум, каквото там имате)
- VPS или Shared хостинг за съхранение на бекъпите (плана трябва да е с пространство, съобразено с големината на вашата бд, най-често най-евтиния върши работа).
- Средни познания в областта на системната администрация. (най-вече познания в защитата на системата и данните в нея)
- Инсталиран expect (най-често всяка система го имат по подразбиране)
- nano или друг за вас удобен конзолен editor

Как става - Стъпка по стъпка

Ако системата ви или хостингът за бекъп са незащитени ще компроментирате вашата база данни.
Моля спрете с четенето до тук, ако не знаете как да защитите вашите данни.

В този урок се използва mysql бази данни. Всичко се прави под root, като ако желаете по ваша преценка може и с нормален user, но гледайте да защитите директорията с файлове.

1. Експортиране на базата данни.
За целта правим кратък bash скрипт:

mkdir /root/sqlbackup
nano /root/sqlexport.sh

[code#!/bin/bash

/usr/bin/mysqldump -u root -p'parola' --all-databases > /root/sqlbackup/backup.sql[/code]

На мястото на parola пишете вашата root парола. Ако желаете за допълнителна защита може да замените root с друг потребител (и съответно паролата за него),
но той трябва да има достъп до съответната дб, затова променете командата според вашите нужди, синтаксиса го има в гугъл.

ВНИМАНИЕ: Ако някой се добере до скрипта ще получи достъп до базата данни и тя ще се компроментира. Вземете мерки за защита.

Правим скрипта изпълним (executable):

Code: Select all
chmod u+x /root/sqlexport.sh


2. Сега ни трябва и скрипт за ъплоудване на базата данни на отдалечено място. За целта ще използваме expect и ftp клиента в линукс.
Expect e вариант на TCL език, чрез който много удобно и лесно може да автоматизираме вход в различни системи, например към ftp сървър.
Създаваме ftp акаунт (напр. securebackup с парола strongpass) на отдалечения хостинг и слагаме следния скрипт на VPS сървъра (където е бд):

nano /root/sendsql.exp

Code: Select all
#!/usr/bin/expect -f

set mydate [clock format [clock seconds] -format "%Y-%m-%d_%H"]

spawn ftp vpsbg.eu
expect "Name"
send -- "securebackup@vpsbg.eu\r"
expect "Password: "
send -- "strongpass\r"
expect "vpsbg.eu\r\r"
send -- "put /root/sqlbackup/backup.sql backup-$mydate.sql\r"
expect "File transfered"
send -- "exit\r"


Слагаме права за изпълнение:
Code: Select all
chmod u+x /root/sendsql.exp


Където разбира се вместо vpsbg.eu слагате хоста на вашия сървър, както и заменете ftp акаунта securebackup и паролата strongpass.

ВНИМАНИЕ: Ако някой се добере до скрипта или ftp акаунта/бекъпа ще получи достъп до базата данни и тя ще се компроментира. Вземете мерки за защита.

3. Решаваме колко често желаем бекъп. Съобразяваме го с това колко често ни се променя базата данни и колко място имаме за бекъп.
Моята препоръка е диапазона от веднъж на всеки час до веднъж дневно. Нека се спрем на къстъм период:
Всеки ден в 1, 8, 12, 16, 20, 22 часа (6 пъти на ден), в 4-та и 10-тата минута съответно за първия и втория скрипт. Правим следните два cron-а:
Code: Select all
1,8,12,16,20,22 4 * * * /root/./sqlexport.sh > /dev/null 2>&1
1,8,12,16,20,22 10 * * * /root/./sendsql.exp > /dev/null 2>&1


4. От време на време не забравайте да изтривате стари бекъпи, за да не ви се препълни диска
База данни от 10MB означава над 400МБ седмично - един път на основния сървър и един път на бекъп мястото.
Моя съвет е всяка седмица да изтривате всичко и да оставяте един бекъп за миналата седмица. Ако бд ви е малка може и месечно да го правите.
За още по-голямо улеснение може да си направите и простичък скрипт с крон, който да трие/архивира периодично.

Та ето още една причина да сте на VPS - на shared хостинг не можете да правите такива неща.. а вече VPS-ите са на достъпна цена.

Ако имате някакъв проблем или въпроси отностно скриптовете или темата, пишете тук. Надявам се да ви е било полезно :)
NULL
User avatar
NullByte
Fewona Staff
 
Posts: 1011
Joined: July 4th, 2012, 2:50 pm
Location: /dev/null

Return to Компютърни

Who is online

Users browsing this forum: No registered users and 1 guest