Бормотухи.НЕТ

Вернуться   Бормотухи.НЕТ > Компьютеры > Операционные системы > Linux
Расширенный поиск

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 16:58 Вверх   #1
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
Вопрос Как организовать автоматическое резервное копирование баз данных на FTP ?

Вопрос такой: Как организовать автоматическое резервное копирование баз данных на FTP ? Стоит Ubuntu 11.04, база естественно в майскуле, можно конечно вручную в самом дле постоянно бэкапить ее и качать, но можно ли сделать чтобы сервак по крону снимал дамп базы и отправлял его на левый FTP для надежного хранения ?
  Ответить с цитированием
Старый 05.04.2012, 19:11 Вверх   #2
Fedoraвод
 
Аватар для Злой
Злой вне форума
Доп. информация
По умолчанию

стандартная задача
Код:
#!/bin/sh

# настройки базы данных mysql
base_user=''
base_pass=''
base_table=''

# настройки удаленного fpt
ftp_user=''
ftp_pass=''
ftp_host=''

# прочие настройки
dt=`date +%Y_%m_%d`
path='/root/mysql_backups'
sitename='table_name'


mysqldump --opt $base_table --user=$base_user --password=$base_pass | gzip -9 > $path/$dt.$sitename.sql.gz
lftp -e 'mirror -R /root/mysql_backups /backups; bye;' -u $ftp_user,$ftp_pass $ftp_host
нужно установить lftp (хорошая штука кстати)

кидаешь содержимое в файл по названием типа mysql_backup.sh делаешь его исполняемым и прописываешь в кроне когда запускаться. Либо кидаешь в папку ежедневного запуска.

пользуйся на здоровье )))

ЛинЭкс фаревА

Последний раз редактировалось Злой; 05.04.2012 в 19:16..
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Старый 06.04.2012, 15:10 Вверх   #3
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

Блин, а у меня получается так что на сервере пока 6 баз данных, а в будущем будет еще больше. Я нашел команду для создания бэкапа всех баз данных которые имеются на сервере, получается так:

mysqldump -uAdmin -pMyPass --all-databases > all_databases.sql

После выполнения команды все базы собираются в одну кучу в файл all_databases.sql. Можно как то разделить эти баз на куски, чтобы каждая база была отдельно в файле?

И еще, я так понимаю lftp командой mirror делает зеркало папки на удаленный FTP. А если к примеру какие то файлы были удалены и какие то обновлены, он на FTP сам удалит файлы те что были удалены на сервере и обновить те что были обновлены ?

Т.е. по сути хочу создать полный автобекап всех сайтов каждый день.
  Ответить с цитированием
Старый 06.04.2012, 15:53 Вверх   #4
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

На счет крона нашел это:
http://habrahabr.kz/blog/746.html , только пихать придется свой скрипт.

А вот еще вариант нагуглил, с помощью Back In Time, делает все сама практически без настроек )
  Ответить с цитированием
Cказали cпасибо:
Старый 07.04.2012, 15:49 Вверх   #5
Fedoraвод
 
Аватар для Злой
Злой вне форума
Доп. информация
По умолчанию

Цитата Сообщение от Serberg Посмотреть сообщение
Можно как то разделить эти баз на куски, чтобы каждая база была отдельно в файле?
Что мешает вызвать в скрипте mysqldump для каждой базы данных?

Цитата Сообщение от Serberg Посмотреть сообщение
я так понимаю lftp командой mirror делает зеркало папки на удаленный FTP
да, но если набрать в консоли man lftp то можно упасть в обморок от доступных опций, ,которые позволяют сделать по ftp абсолютно любую операцию.
  Ответить с цитированием
Cказали cпасибо:
Старый 07.04.2012, 16:41 Вверх   #6
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

Цитата Сообщение от Злой Посмотреть сообщение
Что мешает вызвать в скрипте mysqldump для каждой базы данных?
Ну так их будет прирастать со временем.

Короче говоря к примеру у меня 4 базы. Получается скрипт такой:

PHP код:
#!/bin/sh

# настройки базы данных mysql
base_user='логин_к_базе'
base_pass='пасс_к_базе'
base_table1='имя_базы_1'
base_table2='имя_базы_2'
base_table3='имя_базы_3'
base_table4='имя_базы_4'

# настройки удаленного fpt
ftp_user=''
ftp_pass=''
ftp_host=''

# прочие настройки
dt=`date +%Y_%m_%d`
path='/root/mysql_backups'
sitename='table_name'


mysqldump --opt $base_table1 --user=$base_user --password=$base_pass gzip -$path/$dt.$sitename.sql.gz
mysqldump 
--opt $base_table2 --user=$base_user --password=$base_pass gzip -$path/$dt.$sitename.sql.gz
mysqldump 
--opt $base_table3 --user=$base_user --password=$base_pass gzip -$path/$dt.$sitename.sql.gz
mysqldump 
--opt $base_table4 --user=$base_user --password=$base_pass gzip -$path/$dt.$sitename.sql.gz
lftp 
-'mirror -R /root/mysql_backups /backups; bye;' -u $ftp_user,$ftp_pass $ftp_host 
Или я где то туплю ? С учетом того что один юзер будет иметь доступ ко всем базам.
  Ответить с цитированием
Старый 08.04.2012, 13:12 Вверх   #7
Fedoraвод
 
Аватар для Злой
Злой вне форума
Доп. информация
По умолчанию

Цитата Сообщение от Serberg Посмотреть сообщение
Или я где то туплю ?
тупишь, у тебя на выходе три раза перезапишется
Код:
$path/$dt.$sitename.sql.gz
давай разные имена на выходные файлы, например
Код:
$path/$dt.$base_table1.sql.gz

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

Последний раз редактировалось Злой; 08.04.2012 в 13:21..
  Ответить с цитированием
Cказали cпасибо:
Старый 08.04.2012, 21:04 Вверх   #8
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

Злой, аааааа. Все заработало. Осталось только в крон внести скрипт на ежесуточное выполнение.

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

И до кучи может подскажешь, к примеру во время копирования удаленный сервер сервейджа заблочил временно FTP, у меня такое часто бывает когда копируешь тонну мелких файлов по фтп, он на 2-3 гиге тупо рвет соединение и не дает временно подцепиться. Сейчас наблюдал это при исполнении скрипта. Он тупо пишет невозможно соединиться и повторяет попытку до бесконечности, пока не прервешь выполнение скрипта и через некоторое время запустишь снова. Как то это можно победить ?




Последний раз редактировалось Serberg; 08.04.2012 в 21:42..
  Ответить с цитированием
Старый 08.04.2012, 22:10 Вверх   #9
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

Все, на счет дисконекта разобрался. Скрипт сам дисконектится на 10 минут и потом заново конектится.
  Ответить с цитированием
Старый 09.04.2012, 01:14 Вверх   #10
Fedoraвод
 
Аватар для Злой
Злой вне форума
Доп. информация
По умолчанию

Цитата Сообщение от Serberg Посмотреть сообщение
на 2-3 гиге тупо рвет соединение и не дает временно подцепиться
хз, передавал по 200-300 гигов, такого не замечал.

Цитата Сообщение от Serberg Посмотреть сообщение
А можно как нить папки зеркалируемые исключить для lftp ? Или проще указать конкретно копируемые папки за несколько операций ?
хз как их исключать, но проще действительно синхронизировать несколько папок за несколько заходов.
Я лично вообще не парюсь
Код:
cd /var/www
tar -czf $path/$dt.$sitename.tar.gz *
и все сайты сжаты в один архив + архив закинут в папку с бэкапами, дальше передача по фтп
  Ответить с цитированием
Cказали cпасибо:
Старый 09.04.2012, 21:32 Вверх   #11
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

Злой, короче говоря оптимизировал до максимума резервное копирование. Сейчас копируются только те папки скрипта, которые могут изменяться со временем + база данных, остальное все просто не трогаю. Скрипт получился массивным, но выполняется за 1 минуту )

А в крон добавил прописав выполнение скрипта в кронтаб (nano /etc/crontab). Если кому то надо будет, то вот мануал по крону
Код:
30  17    * * *   root    /var/mysql_backup.sh
Время на сервере кривое, поэтому и стоит на 17:30.


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

Я так понимаю что делается это без ключа -R для команды lftp или нет ?

Последний раз редактировалось Serberg; 09.04.2012 в 21:42..
  Ответить с цитированием
Cказали cпасибо:
Старый 10.04.2012, 01:14 Вверх   #12
Fedoraвод
 
Аватар для Злой
Злой вне форума
Доп. информация
По умолчанию

К сожалению на моей тачке lftp не установлен, а лесть на дедики влом ради просмотра man'ов, украл из инета

Синхронизация текущей папки с папкой на удалённого сервера (синхронизировать локальный каталог с удалённым), т.е. закачка с сервера.
Код:
$ lftp -e 'mirror -e каталог-на-сервере локальный-каталог; bye;' -u логин,пароль удалённый.хост
Синхронизация папки на удалённом сервере с текущей папкой (синхронизировать удалённый каталог с локальным), т.е. закачка на сервера.
Код:
$ lftp -e 'mirror -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост
  Ответить с цитированием
Cказали cпасибо:
Старый 10.04.2012, 01:44 Вверх   #13
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

Злой, ну я имел ввиду что бюез ключа -R но та же команда. Я гугли по теме, читал. Просто накосячить не хочется. Я уже ставлю эксперименты на безопасных папках, от которых ничего не зависит.

Отпишусь как все настрою и это заработает.
  Ответить с цитированием
Старый 10.04.2012, 20:45 Вверх   #14
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
По умолчанию

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

Код:
#!/bin/sh 

# настройки удаленного fpt 
ftp_user='' 
ftp_pass='' 
ftp_host=''

lftp -e 'mirror --only-newer --delete /papks_s_saitom /home/test; bye;' -u $ftp_user,$ftp_pass $ftp_host
Так, тут я убрал ключ -R в отличии от обратного зеркалирования, дальше папки идут в обратном порядке. Т.е. сначла ту которую надо копировать на удаленном сервере, а потом ту в которую копировать на локалке.

Дальше, прописал ключи:
--only-newer - заставляет lftp копировать только новые файлы (или измененные)
--delete - удаляет лишние файлы, которые находятся в локальной директории (т.е. если на удаленке файлы были удалены) - то тут они тоже удалятся.

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

ps
Сам в шоке от того что у меня начинает что то получаться. Злой, бью тебе челом в ноги )
  Ответить с цитированием
Старый 11.04.2012, 11:53 Вверх   #15
Fedoraвод
 
Аватар для Злой
Злой вне форума
Доп. информация
По умолчанию

Цитата Сообщение от Serberg Посмотреть сообщение
Сам в шоке от того что у меня начинает что то получаться. Злой, бью тебе челом в ноги )
Я когдато давно, когда начал постигать азы скриптинга на bash был удивлен не меньше твоего. И сразу подумал, как я раньше жил на винде без этого.
А теперь большинство рутинной и монотонной работы за меня выполняют скрипты такого плана.
  Ответить с цитированием
Cказали cпасибо:
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:01. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
 

Время генерации страницы 0.17512 секунды с 13 запросами