Главная | Контакты



Главная > Программы > MySQL

Ежесуточный бекап MySQL

В связи с грядущим переносом блога live.daemony.org на другой сервер, вспомнилась маленькая мелочь: суточный бекап всех баз данных, лежащих на сервере MySQL на локальной машине. Для достижения цели используются: оболочка shell, утилита mysqldump и планировщик заданий cron.

Пишем коротенький скриптик:

#!/bin/sh
USERNAME="root"
PASSWORD="blablabla"
WDIR="/System_Backup/mysql"
for base in db1 db2 db3 db4 db5 dbn
do
 `/bin/mkdir -p $WDIR/$base`
 `/bin/chmod 700 $WDIR/$base/`
 `/usr/local/bin/mysqldump -u $USERNAME -p$PASSWORD -B $base > $WDIR/$base/backup_$base.sql`
 `/usr/bin/gzip -cf9 $WDIR/$base/backup_$base.sql > $WDIR/$base/$base'_'$(date +%Y-%m-%d).gz`
 `/bin/rm $WDIR/$base/*.sql`
 `/bin/chmod -R o-rwx $WDIR`
done

- где:

  • db1 db2 db3 db4 db5 и так далее - имена баз данных на MySQL сервере, подлежащие бекапу;
  • USERNAME - имя пользователя, имеющего права доступа к упомянутым базам;
  • PASSWORD - пароль пользователя USERNAME
  • WDIR - рабочая директория, куда будут ложиться бекапы. У меня это смонтированная сетевая папка на другой машине.

Скрипт создает директорию для бекапа, далее выгребает бекап соответствующей базы, сжимает его с помощью gzip и устанавливает соответсвующие права доступа на сжатый бекап. Ничего сложного. Далее скрипт попросту гоняется кроном раз в сутки:

30 02 * * * root /root/scripts/mysql-backup.sh

Вот собственно и все.

Материал взят с сайта: http://live.daemony.org

Простейший скрипт бекапа сайтов и баз MySQL

Потребовалось сделать простой скрипт для бекапа всех баз данный MySQL и файлов сайтов на сервере. Пусть сайты хранятся в папке SITES_DIR, бекапы будем хранить в папке BACKUP_PATH, создан пользователь в MYSQL для бекапов MYSQL_USER с паролем MYSQL_PASS. Дамп всех баз данных будем хранить одним файлом, а каждый сайт запакуем в отдельный архив. Резервные копии будем делать каждый день и хранить 5 дней.

  1. Создаем необходимые папки для бекапа:
    mkdir /backup
    mkdir /backup/vhosts
    mkdir/backup/bases
  2. Прописываем скрипт в крон:
    touch /etc/cron.d/backup
  3. Вписываем содержимое скрипта заменяя значения в секции Settings на свои: cat > /etc/cron.d/backup
    #!/bin/bash
    
    #Settings
    BACKUP_PATH="/backup"
    MYSQL_USER="backup"
    MYSQL_PASS="XXXXXXXX"
    SITES_DIR="/data/vhosts"
    
    ## MySQL backup
    mysqldump -u $MYSQL_USER -p$MYSQL_PASS -A  > $BACKUP_PATH/bases/mysql-`date +%m%d%y`
    ## Files backup
    for i in `ls $SITES_DIR`; do
    tar czf $BACKUP_PATH/vhosts/$i-`date +%m%d%y`.tar.gz $SITES_DIR/$i
    done
    
    ## Remove old backups
    find $BACKUP_PATH/vhosts -mtime +5|xargs rm -f
    find $BACKUP_PATH/bases -mtime +5|xargs rm -f
    
    
  4. Выставляем права на скрипт: chown root:root /etc/cron.d/backup
    chmod 660 /etc/cron.d/backup
  5. Перезапускаем Cron:
    /etc/init.d/crond restart

Главная > Программы > MySQL