Система резервного копирования и восстановления данных для MySql

mysql_utils shell script!

Система написана на shell скрипте bash. Для создания резервных копий используется mysqldump. Для создания архивов используется bz2.

https://github.com/Mirocow/mysql_utils

Установка

Настройка

Для debian систем настройка будет выполнена автоматически. Для остальных необходимо создать файл.

  • # nano /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = master-password
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = master-password
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Сохранение всех баз

По умолчанию упаковывается bzip2 c параметром --compress=bzip2

# cd ~
# cd mysql_utils
# bash backup.sh --compress=bzip2 --exclude="mysql"

Запуск справки по скрипту

# bash backup.sh --help
usage: backup.sh options
 
This script buckup all databases.
 
Usage: backup.sh <[options]>
 
Options:
   -e= | --exclude=                     Exclude databases
   --exclude-tables=                    Exclude tables
   -c= | --compress=                    Compress with gzip or bzip2
   -v  | --verbose                      Add verbose into output
   -l  | --lifetime=                    Lifetime for dump files
   --config=                            Config file of Debian format
   --dir=                               Backup directory
   -h  | --help                         This text
 
Examples:
        backup.sh --verbose --compress=
        backup.sh --verbose --compress=zgip
        backup.sh --verbose --compress=bzip2
        backup.sh --verbose --compress= --exclude="mysql"
        backup.sh --verbose --compress= --exclude="mysql" --lifetime="3 day ago"
        backup.sh --verbose --config="/etc/mysql/debian.cnf" --exclude="mysql" --lifetime="1 day ago"
        backup.sh --verbose --dir="/var/backups/mysql" --config="/etc/mysql/debian.cnf" --exclude="mysql" --lifetime="1 day ago"
        backup.sh --verbose --dir="/home/backups/mysql" --exclude="mysql" --lifetime="1 day ago"
        backup.sh --verbose --dir="/home/backups/mysql" --exclude="mysql" --exclude-tables="tbl_template" --lifetime="1 day ago"

Восстановление баз за указанную дату

По умолчанию запакован c параметром --compress=bzip2

# cd /var/backups/mysql/[some date]
# bash ~/mysql_utils/restore.sh

Восстановление выбранной БД

По умолчанию запакован c параметром --compress=bzip2

# cd /var/backups/mysql/[some date]/[some db name]
# bash ~/mysql_utils/restore_db.sh

Установка заданий в cron

nano /etc/default/db_backup

START=yes

nano /etc/cron.daily/db_backup

#!/bin/sh
 
. /etc/default/db_backup
 
if [ "$START" = "yes" ]; then
    logger "Start databases backup system..."
    /bin/bash /root/scripts/mysql_utils/backup.sh --exclude="some_exclude_database"
fi
# tail -f /var/log/syslog
    May 23 12:25:34 db1 logger: BACKUP:   ** Dump tecdoc.2013.ALI_COORD
    May 23 12:25:35 db1 logger: BACKUP:   ** set perm on tecdoc.2013/AL
    May 23 12:25:35 db1 logger: BACKUP:   ** bzip2 tecdoc.2013/ALI_COOR
    May 23 12:25:35 db1 logger: BACKUP:   ** Dump tecdoc.2013.ARTICLES
    May 23 12:25:43 db1 logger: BACKUP:   ** set perm on tecdoc.2013/AR
    May 23 12:25:43 db1 logger: BACKUP:   ** bzip2 tecdoc.2013/ARTICLES
    May 23 12:25:43 db1 logger: BACKUP:   ** Dump tecdoc.2013.ARTICLES_
    May 23 12:25:43 db1 logger: BACKUP:   ** set perm on tecdoc.2013/AR
    May 23 12:25:43 db1 logger: BACKUP:   ** bzip2 tecdoc.2013/ARTICLES
    May 23 12:25:43 db1 logger: BACKUP:   ** Dump tecdoc.2013.ARTICLE_C