Бекапим сервер

    Нередкая это задача, но делается довольно просто!

    Приступим:

    1) бэкап мускула

    Для этого есть очень хорошая утилитка “mysqldump”, она входит в состав мускула. (если вы юзаете lampp то она лежит в “/opt/lampp/bin/mysqldump”)

    Вобщем набиваем в консоли примерно следующее:
    mysqldump –all-databases > /mysql.12.12.2008.dump


    эта команда забекапит все базы данных в файл “mysql.12.12.2008.dump” в корне! на самом деле пишем любой удобный путь! Если вы не рут то нужно указать логин/пароль с помощю –user логин –password пароль

    Приготовьтесь, это может занять серьёзное количество времени если бд приличного размера.

    Фишка может не работать, если в какой-нибудь из бд есть ошибки…

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

    databases=”$(mysql -Bse ’show databases’)”

    for db in $databases
    do
    mysqldump $db > $db.sql
    done


    2) бэкап файлов

    Тут всё проще, достаточно просто заархивировать файлы, вот так:

    tar -czf some.tar.gz -C /home some


    Но опять-же гораздо удобнее упаковать папку каждого сайта в отдельный архив, поэтому:

    names=`dir /home`
    for i in $names
    do
    tar -czf $i.tar.gz -C /home $i
    done


    Ну а в итоге у меня получился следующий скриптик:
    #!/bin/bash

    date=`date +%d.%m.%Y_%H-%M`

    mkdir /home/BACKUPS/$date
    mkdir /home/BACKUPS/$date/DB
    mkdir /home/BACKUPS/$date/DATA

    databases=”$(mysql -Bse ’show databases’)”

    for db in $databases
    do
    if [ "$db" != "" ];
    then
    echo ‘——————’
    echo ‘START DUMPING “‘$db’” DATABASE’
    mysqldump $db > /home/BACKUPS/$date/DB/$db.sql
    echo ‘DB “‘$db’” WAS SUCCESSFULLY DUMPED’
    fi
    done

    names=`dir /home`
    for name in $names
    do
    if [ "$name" != "BACKUPS" -a "$name" != "" ];
    then
    echo ‘——————’
    echo ‘START ARCHIVE “‘$name’” FOLDER’
    tar -czf /home/BACKUPS/$date/DATA/$name.tar.gz -C /home $name
    echo ‘FOLDER “‘$name’” WAS SUCCESSFULLY ARCHIVED’
    fi
    done

    Все Базы и файлы сайтов бекапятся в /home/BACKUPS/текущая дата и время/DB для дампов и /home/BACKUPS/текущая дата и время/DATA для архивов
    Поделиться публикацией

    Похожие публикации

    Комментарии 19

      –3
      спасибо, полезно!
        –2
        как раз искал информацию, а вот она =).Спасибо
          +1
          Что база должна делать? бэкапиться
          Что база делает? бэкапится
            0
            Спасибо, стараюсь избавиться от безграмотности!
            0
            Осталось теперь написать скриптик который из бэкапа поднимает все сразу :)
              0
              Ну как МуСКЛ поднять я тоже у себя написал. Еще раз линк.
              alexsnet.ru/2008/12/mysql-resore-from-backup/

              ЗЫ извините за линки, но пройдя по ним понятно, почему не в комментарии выкладываю код.
              0
              К слову о бэкапах МуСКЛа… Вот есть мой вариантик. Код в комменты выкладывать не буду, дам линк.
              alexsnet.ru/2008/12/mysql-backups-from-console/
                0
                товарищ, ваш сайт не работает
                  0
                  теперь работает. Вы просто попали очень неудачно.
                  Там проблема была с новыми WP 2.7 что FeedBurner не воспринимал RSS.
                  Но такое не у всех… Пришлось переустановить…
                  Заходите сейчас… Пока еще не все поправил, но работает уже…
                0
                нехватает заливки этих самых файлов на фтп.
                Ибо не очень полезно хранить бекапы на этом же серваке :)
                  0
                  Зачем заливка на ftp? rsync (или даже scp) с этим делом замечательно справится. можно ещё проверять lock-файл перед тем, как сливать бэкапы через ssh (при заливке, естественно, проверять ничего не нужно) — всё это дело пишется за пять минут.

                  а ещё инкрементальный бэкап можно делать (с помощью того же тара) — например, раз в неделю полный, а потом каждый день инкрементальный. тоже на пять минут работы ;)
                    +1
                    Насчет заливки вопрос верный. Ведь можно вообще не использовать rsync, scp и так далее, а просто примонтировать директорию с другого сервера, на который делаются бэкапы через nfs и бэкапить сразу туда.
                      0
                      Совершенно верно! NFS или даже sshfs тоже рулят =) Однако не всем по нраву придётся подмонтированный удалённый сервер в режиме 24/7.
                      Впрочем, для каждого случая — своё решение =)
                        0
                        Насколько я понимаю скрипт бэкапа будет запускаться по cron, соответственно никто не мешает делать в скрипте монтирование по nfs файловой системы для бэкапов, а потом, после создания бэкапа, её можно отмонтировать.
                  0
                  чето маловат обзор, нехватает примера бекапов с помощью LVM
                  зы — скрипт бекапа небольшого проекта — pastie.org/341839
                    0
                    Мне кажется вы извращенец :)

                    Бекапы легко и непринуждённо делаются программой rsnapshot, которая в свою очередь использует rsync, поэтому переписываются только изменения в фс, так что экономия явная.

                    А базы mysql, имхо, лучше бекапить бинарно, то есть давайть flush tables; read lock а потом тем же rsync'ом копировать.

                    Справедливости ради надо сказать, что всё будет работать только на снапшотах, в частности lvm, так как они сохраняют целостность данных, а без неё и бекап не бекап.
                      0
                      На время работы mysqldump лочатся все таблицы, а не только те которые в данный момент дампятся. Об этом стоит помнить, чтобы не положить весь проект пока какая-нить таблица с логами будет дампится.
                        0
                        хм не знал, спасибо, может в таком случае и зря ушёл от бекапа базы через php… вобщем весь в раздумьях
                          0
                          Можно просто что-то вроде
                          for i in `mysql -e db select table_name from information_schema.table ...`
                          do
                          mysqldump db $i |gzip > /backup/db.$i.sql.gz
                          done

                          Тогда будут по одной лочится

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое