Maxim Bugakov (palachmb) wrote,
Maxim Bugakov
palachmb

Category:

Бэкапы

Бэкапим базы данных по расписанию.

Чтобы бэкапы не мозолили глаза — складываем их на другой винт.

Для бэкапа используем классический mysqldump, но так как пароль рута открытым текстом нам передавать жалко, — заведем простого пользователя с ограниченными правами, который не сможет внести изменения в базу.

Создаем пользователя backupuser с паролем fintiflushka

CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'fintiflushka';

Наделяем правами чтения и «запирания» таблиц, чтобы блокировать внесение изменений во время создания бэкапа

GRANT SELECT, LOCK TABLES ON *.* TO 'backupuser'@'localhost';

Затем создаем файл backup.sh

#!/bin/sh
# Монтируем диск на который делаем резервные копии
mount /dev/sde1 /mnt
# Создаем переменную DT, которая содержит текущую дату
DT=`date +"%d-%m-%Y"`
# Делаем бэкапы выбранных баз в папку bkup примонтированного диска в файл с именес состоящим из названия базы данных и текущей даты создания бэкапа
mysqldump -ubackupuser -pfintiflushka base1 > /mnt/bkup/base1-$DT.sql
mysqldump -ubackupuser -pfintiflushka base2 > /mnt/bkup/base2-$DT.sql
mysqldump -ubackupuser -pfintiflushka base3 > /mnt/bkup/base3-$DT.sql
# Удаляем из папки бэкапы старше 30 дней (по желанию)
find /mnt/bkup -type f -mtime +30 -print0 | xargs -0 rm -f
# Отмонтируем диск с бэкапами
umount /mnt

И все это запихиваем в планировщик на ежедневное выполнение в 23:00.

# crontab -l

00 23 * * * sh /home/user/backup.sh

При желании бэкапы можно сжимать на лету, к примеру gzip'омю Например, в моем случае это будет выглядеть так:
mysqldump -ubackupuser -pfintiflushka base1 / gzip > /mnt/bkup/base1-$DT.sql.gz

Tags: backup, cron, mysql
Subscribe

Recent Posts from This Journal

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 3 comments