Как часто и как делать бэкап базы в cron

Тема в разделе "Базы данных", создана пользователем itpeople, 17 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. itpeople

    itpeople

    Регистр.:
    6 дек 2007
    Сообщения:
    546
    Симпатии:
    62
    Есть сайт на wp + vbulletin + еще один скрипт
    Как часто нужно делать бэкап базы? (всего 3 базы)

    Как правильно прописать в кроне команду для создания бэкапа?
     
  2. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    PHP:
    0 23 * * * mysqldump -hHost -uUser -pPassword Database > /home/user/Backup/Database.sql
    Например это раз в сутки в 23.00
    Думаю, имеет смысл делать бэкап во время самой маленькой посещаемости и нагрузки на сервер, при большом количестве информации чаще, чтобы в случае чего восстановить бОльшую часть.
    Вот два раза в сутки, в 12.00 и 24.00
    PHP:
    */12 * * * mysqldump -hHost -uUser -pPassword Database > /home/user/Backup/Database.sql
    Это раз в двое суток в 00.00
    PHP:
    0 0 */* * mysqldump -hHost -uUser -pPassword Database > /home/user/Backup/Database.sql
     
    itpeople нравится это.
  3. itpeople

    itpeople

    Регистр.:
    6 дек 2007
    Сообщения:
    546
    Симпатии:
    62
    работает, но есть попутных два вопроса:
    1. можно ли сразу и архивировать базу?
    2. бэкап создается с одним и тем же именем, что неудобно - как-то можно под разными именами это делать?
     
  4. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    написать скрипт, который будет генерировать имя для файла и создавать дамп.
    после сам скрипт повесить на крон
    Код:
    #!/bin/sh
    mysqldump -hHost -uUser -pPassword Database > /home/user/Backup/Database$(date +%y.%m.%d.%H.%M).sql
    exit
    
    или попробовать повесить на крон только саму команду в том виде, что написал я
     
  5. zloba

    zloba Создатель

    Регистр.:
    23 апр 2009
    Сообщения:
    42
    Симпатии:
    5
    А архивировать по идее можно так:

    #!/bin/sh
    dump_name=Database$(date +%y.%m.%d.%H.%M).sql
    mysqldump -hHost -uUser -pPassword Database > /home/user/Backup/$dump_name
    tar -cvf /home/user/Backup/$dump_name /home/user/Backup/$dump_name.tar
    gzip /home/user/Backup/$dump_name.tar
    rm $dump_name
    exit
     
  6. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    В идеалии чем больше тем лучше. Но если хостинг устойчивый то хватает 1 раз в день. В случае ЧП теряешь только данные за день
     
  7. Ins1ne

    Ins1ne Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    89
    Симпатии:
    25

    #!/bin/bash
    PROJNAME=project_name #Имя проекта
    CHARSET=utf8 #Кодировка базы данных (utf8)
    DBNAME=db_name #Имя базы данных для резервного копирования
    DBFILENAME=name_db #Имя дампа базы данных
    ARFILENAME=name #Имя архива с файлами
    HOST=localhost #Хост MySQL
    USER=root #Имя пользователя базы данных
    PASSWD= #Пароль от базы данных
    DATADIR=/home #Путь к каталогу где будут храниться резервные копии
    SRCFILES=/home #Путь к каталогу файлов для архивирования
    PREFIX=`date +%F` #Префикс по дате для структурирования резервных копий

    #start backup
    echo "[--------------------------------[`date +%F--%H-%M`]--------------------------------]"
    echo "[----------][`date +%F--%H-%M`] Run the backup script..."
    mkdir $DATADIR/$PREFIX 2> /dev/null
    echo "[++--------][`date +%F--%H-%M`] Generate a database backup..."
    #MySQL dump
    mysqldump --user=$USER --host=$HOST --password=$PASSWD --default-character-set=$CHARSET $DBNAME > $DATADIR/$PREFIX/$DBFILENAME-`date +%F--%H-%M`.sql
    if [[ $? -gt 0 ]];then
    echo "[++--------][`date +%F--%H-%M`] Aborted. Generate database backup failed."
    exit 1
    fi
    echo "[++++------][`date +%F--%H-%M`] Backup database [$DBNAME] - successfull."
    echo "[++++++----][`date +%F--%H-%M`] Copy the source code project [$PROJNAME]..."
    #Src dump
    tar -czpf $DATADIR/$PREFIX/$ARFILENAME-`date +%F--%H-%M`.tar.gz $SRCFILES 2> /dev/null
    if [[ $? -gt 0 ]];then
    echo "[++++++----][`date +%F--%H-%M`] Aborted. Copying the source code failed."
    exit 1
    fi
    echo "[++++++++--][`date +%F--%H-%M`] Copy the source code project [$PROJNAME] successfull."
    echo "[+++++++++-][`date +%F--%H-%M`] Stat datadir space (USED:( `du -h $DATADIR | tail -n1`"
    echo "[+++++++++-][`date +%F--%H-%M`] Free HDD space: `df -h /home|tail -n1|awk '{print $4}'`"
    echo "[++++++++++][`date +%F--%H-%M`] All operations completed successfully!"
    exit 0


    Вот такой скрипт запускаешь по крону и он делает бэкап базы и файлов в архив, скрипт хорошо комментирован, думаю объяснять что к чему ненадо
     
  8. deniua

    deniua Создатель

    Регистр.:
    5 янв 2009
    Сообщения:
    11
    Симпатии:
    0
    #!/bin/sh
    dump_name=Database$(date +%y.%m.%d.%H.%M).sql
    mysqldump -hHost -uUser -pPassword Database > /home/user/Backup/$dump_name
    tar -cvf /home/user/Backup/$dump_name /home/user/Backup/$dump_name.tar
    gzip /home/user/Backup/$dump_name.tar
    rm $dump_name
    exit
    оптимально
     
  9. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    147
    Симпатии:
    110
  10. gadfly

    gadfly Создатель

    Регистр.:
    30 авг 2007
    Сообщения:
    13
    Симпатии:
    0
    позволю себе внести небольшое дополнение в виде архивирования:
    Код:
    #!/bin/sh
    mysqldump -hHost -uUser -pPassword Database | gzip > /home/user/Backup/Database$(date +%y.%m.%d.%H.%M).sql.gz
    exit
    
    желательно, при добавлении в крон еще перенаправлять вывод ошибок в отдельный лог на всякий пожарный, если это делать нет необходимости, то и создавать скрипт отдельный с одной строкой не очень нужно :)
     
Статус темы:
Закрыта.