10
февраля
2

mysqldump — бекап/дамп данных в Mysql



Mysqldump — это одна из утилит, входящих в пакет с клиентскими программами mysql-client. Используется для создания дампа одной или нескольких баз данных, отдельных таблиц или только их структуры с целью резервирования нужной информации и дальнейшего его восстановления в будущем. Дамп содержит в себе набор SQL-команд, которые выполняются последовательно при разворачивании.

При запуске mysqldump в качестве аргумента передается название базы данных либо ее определенные таблицы или перечисляются несколько баз с помощью ключа «—databases \ -B» либо все «—all-databases \ -A». Также можно указывать дополнительные опции, наиболее полезными из которых являются:
—quick \ -q – дамп непосредственно направляется на stdout (стандартный вывод — экран), не используя буфер;
—opt – соответствует заданию опций —quick —add-drop-table —add-locks —extended-insert —lock-tables, которые максимально ускоряют создание дампа;
—add-drop-table – в полученном дампе перед SQL-командами создания добавляется команда удаления таблицы (drop table);
—add-locks – добавляются строки для блокирования «LOCK TABLES» и разблокирования «UNLOCK TABLE» таблиц при их создании чтобы не получить какие-либо противоречия в результате;
—extended-insert \ -e – используется определенный синтаксис SQL-команды INSERT для более быстрого разворачивания данных;
—lock-tables \ -l – заблокировать все таблицы перед стартом дампа, что благоприятно влияет на паралельные вставки при типе таблиц MyISAM;
—all \ -a – включить все MySQL-специфичные параметры SQL-команды CREATE;
—complete-insert \ -с – используется в команде INSERT задание имен столбца;
—force \ -f – не останавливаться, если получаем SQL-ошибку;
—no-data \ -d – для получения дампа только структуры таблиц;
—no-create-db \ -n – ‘CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;’ не будет помещена в вывод;
—no-create-info \ —t – не писать информацию для создания таблицы (CREATE TABLE);
—password=password \ -ppassword, -P 3306 \ —port=3306, -S /var/lib/mysql/mysql.sock \ —socket= /tmp/mysql.sock, -u user \ —user=user – указать пароль, порт или сокет, пользователь для подключения к mysql-серверу;

В самом обычном и стандартном случае используется:

mysqldump —opt database > backup_database.sql – для создания дампа БД database;
mysql database < backup_database.sql – для подключения к серверу mysqld и БД database с помощью клиента mysql, разворачивая туда созданный дамп.
Также возможен непостредственный перенос данных на другой сервер с помощью задания в командной строки:
mysqldump —opt database|mysql —host=remote_mysqld -C database
а если необходимо получить полную копию сервера баз данных вместе с базой mysql, хранящей информацию о пользователях и доступе, нужно остановить СУБД, заархивировать каталог данных и развернуть архив на другом сервере с аналогичной версией mysqld.

Пример скрипта для создания дампа определенных БД с помщью mysqldump:

touch mysql_backup.sh
chmod u+x mysql_backup.sh
cat > mysql_backup.sh
#!/bin/sh

# задаем переменные, с помощью которых потом будет удобно вносить
#корректировки
DATE=`/bin/date "+%Y%m%d"`
dbs="DB1 DB2"
dump_user="root"
dump_pass="password123"
dest_dir="/tmp/backup"
dump_flags="--add-drop-table --add-locks --all --extended-insert
--quick --force"

# собственно сам процесс:
for db in $dbs
do
echo "Dumping now MySQL database $db..."
/usr/bin/mysqldump --user=$dump_user --password=$dump_pass
$dump_flags -B $db >> $dest_dir/$db.$DATE.sql
tar czvf $dest_dir/$db.$DATE.tgz $dest_dir/$db.$DATE.sql
echo "$db sql-file and tgz-archive locate in $dest_dir"
done
exit
^D 
Понравилась статья?
Подписаться на RSS feed
2 комментария:
  1. Вячеслав 25 января, 2015

    ОПечатка в скрипте: в 20 строке вместо $dump_pas должно быть $dump_pass

  2. admin 8 февраля, 2015

    Спасибо. Исправили.

Оставить комментарий