mysql. Dump restore

При помощи стандартной утилиты mysqldump можно сделать полный бекап всех баз, конкретной базы или бекап отдельной таблицы конкретной базы. В посте рассматриваются некоторые способы резервирования и восстановления данных

Резервирование

Дамп всех баз

mysqldump -u backup -pPASSWORD -A > alldb.sql

Дамп нескольких баз

mysqldump -u backup -pPASSWORD -B db1 db2 db3 > db123.sql

Дамп баз по-таблично

Отдельно сохраняется структура, триггреры, процедуры и события. Все дампы сжимаются и раскладываются по бд/дням

#!/bin/sh

MYSQL_BACKUP_PATH=/home/admin/www
BACKUP_DATE=` date "+%Y-%m-%d"`
set mask 077

cd $MYSQL_BACKUP_PATH
mkdir $BACKUP_DATE
cd $BACKUP_DATE

# Просмотр всех наявных БД. Структура БД, триггеры, процедуры, события сохраняются отдельно
for MYSQL_DB in $(mysql -u backup -pPASSWORD -S /tmp/mysql.sock -N -e "show databases" | tr -d '|' | sed '/+-----/d; /_schema/d; /mysql/d'); do \
     mkdir $MYSQL_DB
     mysqldump -u backup -pPASSWORD -S /tmp/mysql.sock $MYSQL_DB --no-data --triggers --routines --events > $MYSQL_DB/_structure.sql

# Дамп таблиц конкретной БД
     for MYSQL_TABLE in $(mysql -u backup -pPASSWORD -S /tmp/mysql.sock -N -e "show tables from $MYSQL_DB" | tr -d '|' | sed '/+-----/d'); do \
          mysqldump -u backup -pPASSWORD -S /tmp/mysql.sock $MYSQL_DB $MYSQL_TABLE --opt --extended-insert --lock-all-tables > $MYSQL_DB/$MYSQL_TABLE.sql
     done
# Архивирование дампов и раскладка по каталогам 
     tar czf $MYSQL_DB.tgz $MYSQL_DB
     rm -rf $MYSQL_DB
done

Восстановление

Всех баз

mysql -u root -pPASSWORD < alldb.sql

Конкретной базы

mysql -u root -pPASSWORD db1 < db1.sql

Конкретного дампа базы из общего дампа (—all-databases)

sed -n -e '/CREATE DATABASE.*db2/,/CREATE DATABASE/p' alldb.sql > db2.sql

Конкретного дампа таблицы из дампа конкретной базы

Скрипт запускается из той же директории, где хранятся сжатые gzip’ом дампы БД

#!/bin/sh
PATH=/bin:/usr/bin/

ls *.gz | sed 's/\..*//'
echo "Enter dump"
read DUMPDB

gunzip $DUMPDB
cat $DUMPDB | awk '/CREATE TABLE/ {print($3)}' | sed -e s/\`//g

echo "Enter table"
read TABLE

cat $DUMPDB | sed "/ SET /d" | awk '/CREATE TABLE `'$TABLE'`/,/UNLOCK TABLES/' > $TABLE.sql

Александр Черных
системный администратор

429
1+