скрипт бэйкапа dir and mysql

Тема в разделе "Десктопный Linux", создана пользователем ilya-bunker, 28 июн 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. ilya-bunker

    ilya-bunker Создатель

    Регистр.:
    5 май 2009
    Сообщения:
    48
    Симпатии:
    6
    наверно глупый вопрос, но есть ли какой нибудь инструмент для бэйкапа папок и mysql

    могу сам написать, ничего сложного... но лень...

    может у кого нить есть ?

    Добавлено через 2 минуты
    mysql можно быйкапить через mysqldump потом сжимать в архив через tar
    папки через тот же tar...
    автоматизировать можно через cron


    но хотелось бы иметь что нибудь уже написанное, юзаю gentoo linux
     
  2. AmatorY

    AmatorY Постоялец

    Регистр.:
    1 сен 2006
    Сообщения:
    78
    Симпатии:
    13
    попробуй rsnapshot
    Настройка rsnapshot


    rsnapshot — утилита для создания копий состояния файловых систем на базе rsync. Она упрощает создание периодических копий с локальной и удаленных машин по ssh. Она использует, по возможности, жесткие связи, что позволяет существенно уменьшить объем необходимого дискового пространства. (цитата Перейти по ссылке)

    Установка


    Устанавливаем rsnapshot:

    $ sudo apt-get install rsnapshot

    Если вы используете не debian-подобный дистрибутив, rsnapshot наверняка тоже есть в репозиториях вашего дистрибутива. Для CentOS, при включенных RPMForge это делается, например, так:

    # yum install rsnapshot

    Теперь нам нужно создать директорию, где мы собираемся хранить наши «снимки»:

    $ sudo mkdir /var/snapshots

    Настройка


    Теперь можно перейти к настройке, собственно, rsnapshot:

    $ sudo nano /etc/rsnapshot.conf

    Вместо nano вы можете использовать любой другой редактор, например vi, или gedit, если работаете в GNOME.
    Настроить нужно следующие параметры:

    snapshot_root - директория, в которую вы хотите сохранять "снимки".

    interval xxx yy - ххх - название интервала(например hourly, daily), yy - количество снимков для каждого. Например:
    interval hourly 6
    interval daily 7

    Означает, что мы хотим хранить 6 ежечасных копий и 7 ежемесячных. Если уже доступно указанное количество копий, rsnapshot будет заменить старую более новой.

    Расскомментируйте cmd_cp. cmd_ssh расскоментируйте и измените на

    cmd_ssh /usr/bin/ssh

    Настройка бэкапа осуществляется командой backup <откуда> <куда>:

    #Добавляем папку /etc/ с локальной машины в папку localhost/
    backup /etc/ local/
    #Добавляем папку /var/svn с удаленной машины в папку remotehost/
    backup backup@remotehost.ru:/var/svn/ remotehost/


    Помните, что в конфигурационном файле недопустимы пробелы — используйте только табы.

    Пробный запуск


    Запустим rsnapshot:
    $ rsnapshot hourly

    Второй параметр означает интервал, который мы задали в конфигурационном файле.
    Команда может выполняется продолжительное время. После выполнения, смотрим, что она создала:
    $ ls -l /var/snapshots

    Пока что в директории должен быть один каталог: hourly.0. При следующем запуске rsnapshot будет создавать каталоги hourly.1, hourly.2 и т.д., пока не упрется в максимум, указанный нами в конфигурационном файле.

    Настройка cron


    В Ubuntu автоматически создается файл /etc/cron.d/rsnapshot со следующим содержанием:
    0 */4 * * * root /usr/bin/rsnapshot hourly
    30 3 * * * root /usr/bin/rsnapshot daily
    0 3 * * 1 root /usr/bin/rsnapshot weekly
    30 2 1 * * root /usr/bin/rsnapshot monthly

    Вот и все. Теперь у вас 6 раз в сутки должен автоматически создаваться снимок данных с вашего удаленного сервера. Данные в сохранности, да еще и географически распределены.

    Кстати, 6 раз в сутки не означает, что размер будет в 6 раз больше, чем если копировать всего 1 раз в сутки. Если в промежутки между копированиями не будет изменений в файлах, то общий размер копий почти не изменится.

    Дополнительная информация


    С помощью параметра backup_script можно также настроить резервное копирование баз данных MySQL, да и вообще всего, чего угодно. Я не описывал сей процесс, т.к. у меня он не используется и ничего конкретного сказать не могу.
    Подробнее можно почитать в гугле. По запросу rsnapshot вылезает куча релевантных ссылок, правда на английском языке.

    Прошу особо не ругать, на гуру администрирования(да и linux) я не похож, но довольно долго искал, как просто автоматизировать резервное копирование — нашел способ, решил поделиться.
    Но конструктивной критике и предложениям буду, конечно, рад.
     
    ilya-bunker нравится это.
  3. Oleg17

    Oleg17 Постоялец

    Регистр.:
    11 янв 2009
    Сообщения:
    116
    Симпатии:
    14
    А чего тут писать-то... Вот пожалуйста пример:
    Код:
    #!/bin/sh
    tar cvfz - /etc > /usr/local/backup/etc.tar.gz
    tar cvfz - /usr/local/etc > /usr/local/backup/usr_etc.tar.gz
    tar cvfz - /usr/local/www > /usr/local/backup/www.tar.gz
    
    Код:
    #!/bin/sh
    mysqldump --opt --user= --password= database > /usr/local/backup/database.sql
    И в cron воткни. При желании, можно также наладить передачу на ftp, на стример или еще куда..

    UPD: Это если просто. Если простых путей не ищешь, то воспользуйся вот этой софтой Перейти по ссылке
     
    ilya-bunker нравится это.
  4. Cranik

    Cranik Постоялец

    Регистр.:
    9 мар 2009
    Сообщения:
    56
    Симпатии:
    5
    Для бекапа баз MySQL использую след. скрипт:
    Доступен для чтения только руту (так как в скрипте хранится рутовый пароль к базе), папка в корне, в которую бэкапит, тож только для рута.

    PHP:
    #!/bin/bash
    DIR="/backups/mysql_dump"
    mkdir -p $DIR
    LOG
    ="/var/log/mysql_dump.log"
    touch $LOG
    TIMENAME
    =`date +%d.%m.%Y-%H.%M`
    db=`mysql -u root -h localhost -pРУТОВЫЙ_ПАРОЛЬ_МУСКУЛА -Bse 'show databases'`
    for 
    n in $db; do
            
    TIMEDUMP=`date '+%T %x'`
            echo 
    "backup has been done at $TIMEDUMP : $TIMENAME on db: $n>> $LOG
            mysqldump 
    -u root -h localhost -pРУТОВЫЙ_ПАРОЛЬ_МУСКУЛА $n gzip -"$DIR/mysql-$TIMENAME-$n-db.dump.gz"
    done
     
  5. help40

    help40

    Регистр.:
    1 окт 2006
    Сообщения:
    252
    Симпатии:
    26
    мой скрипт

    ну я думаю что стоит посмотрет и на мой скрипт
    не копируйте только , а смотрите внимателно
    если кодировка на mysql другая , то меняйте или удалите ето параметр!

    Код:
    !/bin/bash
    dbname="4images123"
    dbhost="localhost"
    dbuser="4img"
    dbpw="4imgpass"
    webrootdir="/home/domain.com/www/" # (e.g.: webrootdir=/home/user/public_html)
    tarnamebase="domain-" # ime an backup-a
    datestamp=`date +'%m-%d-%Y'`
    startdir=`pwd`
    tempdir=$datestamp
    if test "$1" = ""
    then
    tarname=$tarnamebase$datestamp.tgz
    else
    tarname=$1
    fi
    mkdir $tempdir
    cd $webrootdir
    tar cf $startdir/$tempdir/filecontent.tar .
    cd $startdir/$tempdir
    mysqldump --user=$dbuser --password=$dbpw  --default-character-set=cp1251 --add-drop-table $dbname > dbcontent.sql
    tar czf $startdir/$tarname filecontent.tar dbcontent.sql
    cd $startdir
    rm -r $tempdir
    
    
    използувал его на cpanel где backup отключен
    работает хорошо ..... ставил его в кронтаб
     
  6. a11i3n

    a11i3n Создатель

    Регистр.:
    10 июл 2007
    Сообщения:
    46
    Симпатии:
    12
    вот мой скриптик, очень гибкий и расширяемый
    #####backup.sh
    #!/bin/bash
    BASEDIR=/home/backupsys/backup
    DATE=$(date +%G-%m-%d)
    DATEOLD=$(date -d '7 day ago' +%G-%m-%d)
    LOGFILE=/home/backupsys/archive.log
    #Check for root user login
    if [ ! $( id -u ) -eq 0 ]; then
    echo "You need root privileges run this script. Script Aborted" >> $LOGFILE
    exit
    fi
    #TEST for presence of drive/dir
    if test -d "$BASEDIR" ; then
    #1 If backup for the day exists delete it
    if test -d "$BASEDIR/$DATE"; then
    rm -rf $BASEDIR/$DATE
    echo "Old Home Backup for $DATE Deleted! Continuing..." >> $LOGFILE
    fi
    #test for 7 day old directory to delete#
    if test -d "$BASEDIR/$DATEOLD" ; then
    rm -rf $BASEDIR/$DATEOLD
    echo "Backup from $DATEOLD Removed." >> $LOGFILE
    else
    echo "No Backup for $DATEOLD exists. Continuing..." >> $LOGFILE
    fi
    #Create New Backups of /etc and $HOMEDIR
    echo "Creating Backup Directory for $DATE." >> $LOGFILE
    if test -d "$BASEDIR/$DATE"; then
    echo "$BASEDIR/$DATE exists.. continuing" >> $LOGFILE
    #//start
    cp -a /etc $BASEDIR/$DATE/etc
    echo "Archiving $BASEDIR/$DATE/etc to $BASEDIR/$DATE/etc.tar" >> $LOGFILE
    tar czf $BASEDIR/$DATE/etc.tar $BASEDIR/$DATE/etc
    rm -rf $BASEDIR/$DATE/etc
    echo "Done Backing Up /etc to $BASEDIR/$DATE/etc.tar!!" >> $LOGFILE
    #//end
    #//start
    cp -a /home/site $BASEDIR/$DATE/site
    echo "Archiving $BASEDIR/$DATE/site to $BASEDIR/$DATE/site.tar" >> $LOGFILE
    tar czf $BASEDIR/$DATE/site.tar $BASEDIR/$DATE/site
    rm -rf $BASEDIR/$DATE/site
    echo "Done Backing Up /home/site to $BASEDIR/$DATE/site.tar!!" >> $LOGFILE
    #//end
    #//start
    echo "Statr Backuping Database..." >> $LOGFILE
    mysqldump -uroot -ppasswd --all-databases |gzip >$BASEDIR/$DATE/all-databases.sql.gz
    echo "Done Backuping Database to $BASEDIR/$DATE/all-databases.sql.gz..." >> $LOGFILE
    #//end
    exit
    else
    echo -e "$BASEDIR/$DATE does not exist.. creating."
    mkdir $BASEDIR/$DATE
    #//start
    cp -a /etc $BASEDIR/$DATE/etc
    echo "Archiving $BASEDIR/$DATE/etc to $BASEDIR/$DATE/etc.tar" >> $LOGFILE
    tar czf $BASEDIR/$DATE/etc.tar $BASEDIR/$DATE/etc
    rm -rf $BASEDIR/$DATE/etc
    echo "Done Backing Up /etc to $BASEDIR/$DATE/etc.tar!!" >> $LOGFILE
    #//end
    #//start
    cp -a /home/site $BASEDIR/$DATE/site
    echo "Archiving $BASEDIR/$DATE/site to $BASEDIR/$DATE/site.tar" >> $LOGFILE
    tar czf $BASEDIR/$DATE/site.tar $BASEDIR/$DATE/site
    rm -rf $BASEDIR/$DATE/site
    echo "Done Backing Up /home/site to $BASEDIR/$DATE/site.tar!!" >> $LOGFILE
    #//end
    #//start
    echo "Statr Backuping Database..." >> $LOGFILE
    mysqldump -uroot -ppasswd --all-databases |gzip >$BASEDIR/$DATE/all-databases.sql.gz
    echo "Done Backuping Database to $BASEDIR/$DATE/all-databases.sql.gz..." >> $LOGFILE
    #//end
    exit
    fi
    else
    echo "Directory $BASEDIR not present. Is the Drive Plugged in and mounted?" >> $LOGFILE
    exit
    fi
    ###########
     
  7. help40

    help40

    Регистр.:
    1 окт 2006
    Сообщения:
    252
    Симпатии:
    26
    вот я не уверен что ето нужно

    if [ ! $( id -u ) -eq 0 ]; then
    echo "You need root privileges run this script. Script Aborted"

    а и так .....юзер скопирует ... скрипт не сработает , потому что юзер не роот :))
     
  8. a11i3n

    a11i3n Создатель

    Регистр.:
    10 июл 2007
    Сообщения:
    46
    Симпатии:
    12
    И хорошо, что просто юзер не заюзает. Может повезет и сам допилит напильником;)
    так сказать левел-ап
    всего-то кильнуть
    Код:
    if [ ! $( id -u ) -eq 0 ]; then
    echo "You need root privileges run this script. Script Aborted" >> $LOGFILE
    exit
    fi
    
     
  9. ilya-bunker

    ilya-bunker Создатель

    Регистр.:
    5 май 2009
    Сообщения:
    48
    Симпатии:
    6
    спс, не совсем то что нужно но спс :)
     
  10. ilya-bunker

    ilya-bunker Создатель

    Регистр.:
    5 май 2009
    Сообщения:
    48
    Симпатии:
    6
    написал свой скрипт, бейкапятся все базы по отдельности, если кому надо то вылажу... + бейкапятся все нужные мне конфиги
     
Статус темы:
Закрыта.