По просьбам друзей, выкладываю скрипт для бэкапа MySQL с подробными комментариями. Точнее, в основном выкладываю комментарии для этого скрипта Сам скрипт можно найти здесь: http://rm-rf.ucoz.ru/publ/5-1-0-5 Code # Set vars (PLEASE CHANGE IF REQUIRED) bckpdir='/var/backup' bckplist='mysql_databases_list.txt' bckppath=$bckpdir/$bckplist adminemail=' admin@ep.com ' bckpdir = директория в которую будут делаться бэкапы bckplist = список баз мускула bckppath = полный путь к файлу со списком баз для бэкапа adminemail = адрес, на который будут приходить отчеты об архивации Code # Set formatted date dede=`date "+%d"` meme=`date "+%m"` yeye=`date "+%Y"` todaydate="$yeye$meme$dede" # Set formatted date dede=`date "+%d"` - день недели в формате ДД meme=`date "+%m"` - месяц в формате ММ yeye=`date "+%Y"` - год в формате ГГ todaydate="$yeye$meme$dede" - полная дата в формате ГГММДД )))) Можно было сделать проще в одну строчку, но так нагляднее, возможно у кого-то другой формат даты в бэкапах Code # Check if directory for backup not exist if test -d $bckpdir then echo "Dir exists" > /dev/null else mkdir $bckpdir fi Проверка, существует ли папка для бэкапов. Если да,то печатает "Dir exist", если нет, то создает $bckpdir (см. первый параграф) Code # Creating file with databases names inside echo "show databases;" | /usr/local/bin/mysql -u root | sed '1,1d' > $bckppath # Creating file with databases names inside echo "show databases;" | /usr/local/bin/mysql -u root | sed '1,1d' > $bckppath Самое сложное в скрипте, сделал в одну строчку. В общем, заходим в базу под рутом "/usr/local/bin/mysql -u root", печатаем "show databases;" и вытаскиваем "sed '1,1d'" названия баз мускула. Вывод перенаправляем в файл $bckppath. Code [b]# Creating dump file of all databases /usr/local/bin/mysqldump --all-databases > $bckpdir/all-databases.sql[/b] Этой командой делаем бэкап всех баз данных, на случай того, если крякнет весь мускул. Далее делаем отдельно бэкап каждой базы, на случай, если крякнет одна из баз. Code # Set vars parse=`cat $bckppath` # Creating dump files of every databases who listed in "show databases" for i in $parse do /usr/local/bin/mysqldump --databases $i > $bckpdir/$i.sql done Переменной parse ставим значение "cat $bckppath", она будет перечислять построчно в цикле каждую строчку файла $bckppath Далее делаем цикл, с присвоением переменной i значений из $parse и подстановкой в /usr/local/bin/mysqldump --databases $i > $bckpdir/$i.sql То есть под $i подразумевается название базы данных из строчки $bckppath. Если у нас три базы данных, перечисленных в $bckppath: то, соответственно, у нас и будет такая последовательность: Code i=onotole /usr/local/bin/mysqldump --databases onotole > $bckpdir/onotole.sql i=zhopa /usr/local/bin/mysqldump --databases zhopa > $bckpdir/zhopa.sql i=ololo /usr/local/bin/mysqldump --databases ololo > $bckpdir/ololo.sql Code # Creating archive with dumps # use "tar -xvf archivename.tar" for unpack tar -cvf $bckpdir/$todaydate.wwwsrv.mysqldump.tar $bckpdir/*.sql Создаем архив с дампами мускульных баз. Проще говоря, архивируем полученные файлы. Code # E-mail list of completed dumps ls -l $bckpdir/*.sql $bckpdir/*.tar | awk '{print ($5,$8,$9)}' | sort -n -r | mail -s "BACKUP.GW.MySQL" $adminemail Отсылка на почту админу списка файлов в $bckpdir. Тут используется переменная $adminemail Code # Cleaning up temporary directory rm -Rf $bckpdir/*.sql rm -Rf $bckpdir/$bckplist Очищаем директорию с бэкапами Вот в принципе и всё. Всегда можно упростить и дополнить. Конструктивная критика приветствуется.
|