NullByte
Active Member
За какво е тази статия?
Много често най-важната информация на нашия сървър е базата данни. Останалото лесно можем да го възстановим или
да правим рядко копия, защото съдържанието и данните се променят рядко.
Нещата с базата данни обаче са по-различни. Има много начин да я загубим и колкото по-рядко правим бекъп, толкова
по-голям е шанса той да е стар. А за хора, които ползват блогове и форуми това би било огромен кошмар и главоболие.
Не само, че всеки ден е от значение, но и всеки час. Представете си само разочарованието на някой ваш потребител, когато разбере, че темата
или статията, която е писал/а толкова дълго и старателно е безвъзвратно изгубена? Или пък същото да сполети ваша хубава статия в блога ви? Ад.
Написах скриптове и тази статия, в която ще се спрем на един начин, до който аз достигнах, а вероятно и хиляди други, за автоматизацията на бекъп на базите данни.
Забранявам да се копира без мое разрешение, както и части от нея или кода - тя е само за моя блог и форума на предприемач.
Какво ни е нужно?
Всичко е много лесно и просто, за постигането на целите ни се нуждаем от:
- VPS сървър, на който е нашата база данни (сайтче, блогче или форум, каквото там имате)
- VPS или Shared хостинг за съхранение на бекъпите (плана трябва да е с пространство, съобразено с големината на вашата бд, най-често най-евтиния върши работа).
- Средни познания в областта на системната администрация. (най-вече познания в защитата на системата и данните в нея)
- Инсталиран expect (най-често всяка система го имат по подразбиране)
- nano или друг за вас удобен конзолен editor
Как става - Стъпка по стъпка
Ако системата ви или хостингът за бекъп са незащитени ще компроментирате вашата база данни.
Моля спрете с четенето до тук, ако не знаете как да защитите вашите данни.
В този урок се използва mysql бази данни. Всичко се прави под root, като ако желаете по ваша преценка може и с нормален user, но гледайте да защитите директорията с файлове.
1. Експортиране на базата данни.
За целта правим кратък bash скрипт:
mkdir /root/sqlbackup
nano /root/sqlexport.sh
На мястото на parola пишете вашата root парола. Ако желаете за допълнителна защита може да замените root с друг потребител (и съответно паролата за него),
но той трябва да има достъп до съответната дб, затова променете командата според вашите нужди, синтаксиса го има в гугъл.
ВНИМАНИЕ: Ако някой се добере до скрипта ще получи достъп до базата данни и тя ще се компроментира. Вземете мерки за защита.
Правим скрипта изпълним (executable):
2. Сега ни трябва и скрипт за ъплоудване на базата данни на отдалечено място. За целта ще използваме expect и ftp клиента в линукс.
Expect e вариант на TCL език, чрез който много удобно и лесно може да автоматизираме вход в различни системи, например към ftp сървър.
Създаваме ftp акаунт (напр. securebackup с парола strongpass) на отдалечения хостинг и слагаме следния скрипт на VPS сървъра (където е бд):
nano /root/sendsql.exp
Слагаме права за изпълнение:
Където разбира се вместо vpsbg.eu слагате хоста на вашия сървър, както и заменете ftp акаунта securebackup и паролата strongpass.
ВНИМАНИЕ: Ако някой се добере до скрипта или ftp акаунта/бекъпа ще получи достъп до базата данни и тя ще се компроментира. Вземете мерки за защита.
3. Решаваме колко често желаем бекъп. Съобразяваме го с това колко често ни се променя базата данни и колко място имаме за бекъп.
Моята препоръка е диапазона от веднъж на всеки час до веднъж дневно. Нека се спрем на къстъм период:
Всеки ден в 1, 8, 12, 16, 20, 22 часа (6 пъти на ден), в 4-та и 10-тата минута съответно за първия и втория скрипт. Правим следните два cron-а:
4. От време на време не забравайте да изтривате стари бекъпи, за да не ви се препълни диска
База данни от 10MB означава над 400МБ седмично - един път на основния сървър и един път на бекъп мястото.
Моя съвет е всяка седмица да изтривате всичко и да оставяте един бекъп за миналата седмица. Ако бд ви е малка може и месечно да го правите.
За още по-голямо улеснение може да си направите и простичък скрипт с крон, който да трие/архивира периодично.
Та ето още една причина да сте на VPS - на shared хостинг не можете да правите такива неща.. а вече VPS-ите са на достъпна цена.
Ако имате някакъв проблем или въпроси отностно скриптовете или темата, пишете тук. Надявам се да ви е било полезно
Много често най-важната информация на нашия сървър е базата данни. Останалото лесно можем да го възстановим или
да правим рядко копия, защото съдържанието и данните се променят рядко.
Нещата с базата данни обаче са по-различни. Има много начин да я загубим и колкото по-рядко правим бекъп, толкова
по-голям е шанса той да е стар. А за хора, които ползват блогове и форуми това би било огромен кошмар и главоболие.
Не само, че всеки ден е от значение, но и всеки час. Представете си само разочарованието на някой ваш потребител, когато разбере, че темата
или статията, която е писал/а толкова дълго и старателно е безвъзвратно изгубена? Или пък същото да сполети ваша хубава статия в блога ви? Ад.
Написах скриптове и тази статия, в която ще се спрем на един начин, до който аз достигнах, а вероятно и хиляди други, за автоматизацията на бекъп на базите данни.
Забранявам да се копира без мое разрешение, както и части от нея или кода - тя е само за моя блог и форума на предприемач.
Какво ни е нужно?
Всичко е много лесно и просто, за постигането на целите ни се нуждаем от:
- VPS сървър, на който е нашата база данни (сайтче, блогче или форум, каквото там имате)
- VPS или Shared хостинг за съхранение на бекъпите (плана трябва да е с пространство, съобразено с големината на вашата бд, най-често най-евтиния върши работа).
- Средни познания в областта на системната администрация. (най-вече познания в защитата на системата и данните в нея)
- Инсталиран expect (най-често всяка система го имат по подразбиране)
- nano или друг за вас удобен конзолен editor
Как става - Стъпка по стъпка
Ако системата ви или хостингът за бекъп са незащитени ще компроментирате вашата база данни.
Моля спрете с четенето до тук, ако не знаете как да защитите вашите данни.
В този урок се използва mysql бази данни. Всичко се прави под root, като ако желаете по ваша преценка може и с нормален user, но гледайте да защитите директорията с файлове.
1. Експортиране на базата данни.
За целта правим кратък bash скрипт:
mkdir /root/sqlbackup
nano /root/sqlexport.sh
Код:
#!/bin/bash
NOW=$(date +"%F-%H")
/usr/bin/mysqldump -u root -p'parola' --all-databases > /root/sqlbackup/db-$NOW.sql
На мястото на parola пишете вашата root парола. Ако желаете за допълнителна защита може да замените root с друг потребител (и съответно паролата за него),
но той трябва да има достъп до съответната дб, затова променете командата според вашите нужди, синтаксиса го има в гугъл.
ВНИМАНИЕ: Ако някой се добере до скрипта ще получи достъп до базата данни и тя ще се компроментира. Вземете мерки за защита.
Правим скрипта изпълним (executable):
Код:
chmod u+x /root/sqlexport.sh
2. Сега ни трябва и скрипт за ъплоудване на базата данни на отдалечено място. За целта ще използваме expect и ftp клиента в линукс.
Expect e вариант на TCL език, чрез който много удобно и лесно може да автоматизираме вход в различни системи, например към ftp сървър.
Създаваме ftp акаунт (напр. securebackup с парола strongpass) на отдалечения хостинг и слагаме следния скрипт на VPS сървъра (където е бд):
nano /root/sendsql.exp
Код:
#!/usr/bin/expect -f
set mydate [clock format [clock seconds] -format "%Y-%m-%d_%H"]
spawn ftp vpsbg.eu
expect "Name"
send -- "[email protected]\r"
expect "Password: "
send -- "strongpass\r"
expect "vpsbg.eu\r\r"
send -- "put /root/sqlbackup/db-$mydate.sql backup-$mydate.sql\r"
expect "File transfered"
send -- "exit\r"
Слагаме права за изпълнение:
Код:
chmod u+x /root/sendsql.exp
Където разбира се вместо vpsbg.eu слагате хоста на вашия сървър, както и заменете ftp акаунта securebackup и паролата strongpass.
ВНИМАНИЕ: Ако някой се добере до скрипта или ftp акаунта/бекъпа ще получи достъп до базата данни и тя ще се компроментира. Вземете мерки за защита.
3. Решаваме колко често желаем бекъп. Съобразяваме го с това колко често ни се променя базата данни и колко място имаме за бекъп.
Моята препоръка е диапазона от веднъж на всеки час до веднъж дневно. Нека се спрем на къстъм период:
Всеки ден в 1, 8, 12, 16, 20, 22 часа (6 пъти на ден), в 4-та и 10-тата минута съответно за първия и втория скрипт. Правим следните два cron-а:
Код:
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-ите са на достъпна цена.
Ако имате някакъв проблем или въпроси отностно скриптовете или темата, пишете тук. Надявам се да ви е било полезно