При помощи стандартной утилиты 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

- Системный администратор с 2000 года
- Участник Хабр Q&A и cyberforum
- Кейсы