Недавно уже делал заметку о настройке mysqldump для бэкапа баз данных mysql. Продолжу тему и приведу еще несколько полезных примеров из практики.
Чаще всего база дампится целиком. Если вам нужно восстановить отдельную таблицу из полного дампа, то простого способа сделать это нет. Я решаю эту задачу в консоли с помощью линуксовых утилит.
cat dbase.sql | /usr/bin/awk '/CREATE TABLE `b_catalog_discount`/,/UNLOCK TABLES/' > /tmp/b_catalog_discount.sql
Ищу в дампе строку CREATE TABLE и UNLOCK TABLES и сохраняю все, что между этих строк. Такой способ сработает, если вы дампите с ключами add-locks и create-options. Если дампите без них, по посмотрите сами, какие строки окаймляют создание таблиц в дампе.
Если нужно сделать потабличный дамп баз данных, использую простой скрипт с циклом:
#!/bin/bash
USER='root'
PASS='pass'
MYSQL="mysql --user=$USER --password=$PASS --skip-column-names";
DIR="/tmp/backupdb"
for s in mysql `$MYSQL -e "SHOW DATABASES"`;
do
mkdir $DIR/$s;
for t in `$MYSQL -e "SHOW TABLES FROM $s"`;
do
/usr/bin/mysqldump --user="$USER" --password="$PASS" --opt $s $t |
/usr/bin/gzip -c > $DIR/$s/$t.sql.gz;
done
done
Данный скрипт сделает потабличный бэкап всех баз данных и положит каждую базу данных в отдельную директорию. Если вам нужна будет конкретная база данных, то замените конструкцию `$MYSQL -e "SHOW DATABASES"` на имя нужной базы данных.
Восстановить всю базу из потабличного бэкапа можно тоже скриптом:
#!/bin/bash
DB=dbase;
USER='root'
PASS=''pass
DIR="/tmp/backupdb/dbase"
for s in `ls -1 $DIR`;
do
echo "--> $s restoring... ";
zcat $DIR/$s | /usr/bin/mysql --user=$USER --password=$PASS $DB;
done
Удобнее не использовать в скриптах пользователя и пароль, а задавать их в ~/.my.cnf, обязательно ограничив доступ на чтение.
#mysql #backup #bash
Post #1059
6.15K
- 👍 2