Дамп таблиц mysql базы

При помощи стандартной утилиты mysqldump можно сделать полный бекап базы или бекап отдельной таблицы. Базы, которые весят по несколько десятков гигабайт выгоднее дампить по-таблично. Накатить в БД одну таблицу легче, чем вынимать таблицу из дампа

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

#!/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

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

Статьи по теме