Создание дампа mysql. Backup баз данных при помощи Mysqldump

Создаем backup баз данных при помощи Mysqldump

Команда для создания backup базы данных, с помощью Mysqldump, выглядит следующим образом:


#mysqldump -u [имя пользователя] -p[ пароль ] --databases [имя базы данных] >

-u [имя пользователя] - пользователь с правами, хотябы для чтения.
-p[пароль] - пароль пользователя, указываем без пробела перед ключем, иначе запросит пароль
--databases [имя базы данных] - краткий вариант -B, указываем имя одной или нескольких баз данных для выгрузки в дамп. При создании backupа одной базы данных, опцию --databases, можно и не писать.
> - перенаправление вывода (stdout)

Создадим backup одной базы данных mysql:

#mysqldump -u adminDB -padminDBpass -B сайт > /backup/сайт.sql

После -p нет пробела, сразу указываем пароль..sql. Если данные из этой базы не нужны, необходимо только сохранить структуру таблиц, то написать команду можно сдедующим образом

#mysqldump -u adminDB -padminDBpass --no-data -B info-linux..sql

Ключ --no-data (краткий вариант -d), таким образом ключ указывает mysqldump, в дамп не скидывать данные.

Можно создавать дампы только необходимых таблиц, конкретной базы данных:

#mysqldump -u adminDB -padminDBpass -B сайт --tables article users > /backup/сайт_tables.sql

Вышеприведенная команда, создаст backup таблиц article и users базы данных сайт и сохраняет в файл /backup/сайт_tables.sql.

Если нужен дамп без данных, а только со структурой таблиц, то используем снова ключ --no-data.
./backup/сайт_tables_nodata.sql
Если необходимо создать backup нескольких баз данных, то просто перечисляем из название после ключа --databases (-B):

#mysqldump -u adminDB -padminDBpass -B сайт info-linux > /backup/info_linux.sql

Для создания резервной копии всех баз данных, необходимо использовать ключ --all-databases или более удобный и простой вариант: -A:

#mysqldump -u adminDB -padminDBpass -A > /backup/all_databases.sql

Вот теперь, после выполнения выше приведенной команды, будет создана полная резервная копия всех баз данных

Восстановим данные из нашего backup

Ничего сложного в восстановлении базы данных нет, для этого воспользуемся стандартной программой-клиент mysql, перенаправим (stdin) в нее файл с нашей резервной копии. Делается это так:

#mysql -u adminDB -padminDBpass < /backup/all_databases.sql

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

#mysql -u adminDB -padminDBpass test < test_table.sql

В приведенном выше примере, помещаем в базу test таблицу test_table.
При помощи программы mysqldump, очень быстро копировать таблицы с данными или только структуры таблиц, из одной базы данных в другую. Небольшой пример:

#mysqldump -u adminDB -padminDBpass --no-data -B test1 --tables test_table > /struct_test_table.sql

Сбрасываем в дамп структуру таблицы test_table из базы данных test1.

#mysql -u adminDB -padminDBpass other_testdb < struct_test_table.sql

Восстанавливаем структуру таблицы, из только созданной, резервной копии и разворачиваем ее в базу данных other_testdb.

Параметры программы Mysqldump

--help, -? Выводит справку по опциям.
--add-drop-database Перед каждой командой CREATE DATABASE добавляет команду, DROP DATABASE
--add-drop-table Перед каждой командой CREATE TABLE добавляет команду, DROP TABLE
--add-locks Для ускорения операций вставки обрамляет дамп командами LOCK TABLES и UNLOCK TABLES,
--all-databases, -A Создание резервной копии всех баз данных, данного сервера.
--allow-keywords Позволяет использовать имена столбцов, совпадающие с ключевыми словами. Добавляется префикс таблицы к имени такого столбца.
--character-sets-dir= путь Директории с наборами символов кодировок
--comments, -i Добавляет в файл дампа, дополнительную информацию (версия MySQL, имя хоста), отмена опцией --skip-comments
--compact Создает более компактный дамп. Включает автоматически опции: --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys и --skip-set-charset при использовании данного параметра,

--compatible= имя Очень полезная опция, попытка повышения совместимости создаваемого дампа, с базой данных более старой версией MySQL. или другого типа. Возможные значения: ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options или no_field_options. Позволяется использовать несколько значений, разделенных запятыми.
--complete-insert, -c Позволяет использовать полную форму оператора INSERT, даже включая имена столбцов.
--compress, -C Использует компрессию, при обмене данными между сервером и клиентом, естественно при условии, что поддерживают компрессию как клиент так и сервер.
--create-options при использовании оператора CREATE TABLE включать все MySQL опции
--databases, -B Позволяет делать дамп нескольких баз данных, перечисленных после опции. В отсутствии этого параметра, mysqldump, воспринимает первое значение в качестве имени базы данных, а остальные как имена таблиц.
--default-character-set= кодировк а. Опция устанавливающая кодировку по-умолчанию.
--delayed-insert Использует INSERT DELAYED, вместо оператора INSERT.
--delete-master-logs Удаляет репликаций бинарный лог на основном сервере после создания дампа. опция --master-data включается автоматически, при использовании этой опции.
--disable-keys, -K Для каждой таблицы, оператор INSERT, обрамляется выражением /*! 40000 ALTER TABLE tbl_name DISABLE KEYS */ и /*! 40000 ALTER TABLE tbl_name ENABLE KEYS */.Опция позволяющая ускорять загрузку при восстановлении из дампа, для таблиц типа MyISAM, за счет создания индексов после вставки всех данных.
--dump-date Добавляет дату создания дампа, если включена опция --comments,
--extended-insert, -e Позволяет использовать синтаксис оператора INSERT. Ускоряет последующую вставку данных и уменьшает размер дампа.
--flush-logs, -F Перед созданием резервной копии, переоткрыть лог файлы Старый файл сохраняется с суффиксом -old. При использовании с ключем --all-databases (краткий вариант -A), будут переоткрыты лог-файлы, для которой делается дамп, каждой базы данных.
--flush-privileges После создания дампа базы данных Выполнять команду FLUSH PRIVILEGES .
--force, -f Даже в случае возникновения ошибки продолжает создание резервной копии.
--host= имя_хоста, -h имя_хоста Указывает хост MySQL сервера. По-умолчанию backup делается для localhost
--hex-blob Представляет бинарные данные полей в шестнадцатиричном формате (hex) BINARY, VARBINARY, BLOB и BIT.
--ignore-table= имя_базы.имя_таблицы Не скидывать в дамп "имя_таблицы" из базы "имя_базы". Для каждой игнорируемой таблицы, опцию нужно использовать повторно,
--insert-ignore В оператор INSERT дописывать опцию IGNORE. --lock-all-tables, -x . Во время создания резервной копии, блокировка всех таблиц, Опция отключает автоматически --single-transaction и --lock-tables.
--lock-tables, -l Блокирует таблицы базы данных, на момент создания резервной копии. Таблицы каждой базы блокируются отдельно, при дампе всех баз данных с этим ключом. Для так называемых транзакционных таблиц, типа InnoDB и BDB, лучше использовать с ключом --single-transaction.
--log-error= имя_файла В файл "имя_файла" пишет ошибки и предупреждения.
--no-autocommit Для увеличения скорости выполнения большого количества запросов INSERT, Включает операторы INSERT для каждой таблицы, в операторы SET AUTOCOMMIT и COMMIT.
--no-create-db, -n При использовании опций --databases и --all-databases, данная опция подавляет вывод в дамп оператора CREATE DATABASE,
--no-create-info, -t Для пересоздания каждой таблицы из резервной копии, не писать CREATE TABLE,
--no-data, -d Оставлять только операторы CREATE TABLE для создания структуры. Не скидывать в дамп содержимое таблиц.

--opt Групповая опция. Синоним включения опций, --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, --set-charset. Включена по-умолчанию, ускоряет процесс создания резервной копии. Отключается опцией --skip-opt.
--order-by-primary Сортирует ряды таблиц по первому уникальному индексу, если индекс существует или по первичному ключу. Полезна если создается дамп таблиц MyISAM с дальнейшей вставкой в таблицы InnoDB.
--password[=password], -p Пароль юзера, для подключения к серверу. Надо не забывать, что пароль должен идти сразу за ключом без разделяющего пробела. Если указать только саму опцию без пароля, он будет запрошен.
--port= номкр_порта, -P номкр_порта Номер порта.
--protocol={TCP|SOCKET|PIPE|MEMORY} для подключения к MySQL серверу использовать указанный протокол.
--quick, -q Вместо того что-бы скидывать весь объем строк в буфер памяти, ключ принуждает Mysqldump восстанавливать строки по одной за раз. Полезна когда создаютя резервные копий при больших таблицах.
--quote-names, -Q Обрамляет имена ковычками баз данных, таблиц и колонок. Включена по-умолчанию.
--replace Начинается с версии MySQL 5.1.3, использует оператор REPLACE вместо INSERT.
--result-file= имя_файла, -r имя_файла Вывод результатов в файл. Естественно, если файл с таким именем существует, то он будет перезаписан.
--routines, -R Для использования данной опции, необходимы права SELECT на таблицу proc, системной базы данных mysql. Записывать в дамп хранимые процедуры и функции. Дамп будет содержать операторы CREATE PROCEDURE и CREATE FUNCTION. Эти операторы не будут содержать атрибутов времени создания и модификации хранимых процедур и функций и после восстановления дампа они будут равны времени восстановления, при использовании этой опции. Если нужно сохранить исходные атрибуты времени, вместо использования данной опции, лучше сделать дамп таблицы mysql.proc, под именем пользователя, который имеет на это достаточные права. Появление опции началось с версии MySQL 5.1.2.
--set-charset По-умолчанию, данная опция включена, что-бы подавить, используйте --skip-set-charset. Добавляет в дамп оператор SET NAMES со значением кодировки по-умолчанию.
--single-transaction Выполнять оператор BEGIN SQL, перед началом создания резервной копии. Данная опция используется только для таблиц, типа InnoDB. Только этот тип таблиц может быть сохранен в дамп в актуальном состоянии, после выполнения BEGIN SQL, и без блокировки приложения. Например могут измениться в процессе создания резервной копии таблицы типа MyISAM или MEMORY, с использованием данной опции, в итоге, информация в дампе будет противоречивой и неактуальной. Опции являются взаимоисключающими: --single-transaction и --lock-tables.
--socket= путь_к_файлу_socket, -S путь_к_файлу_socket Для подключения к localhost, использовать файл unix-socket.
--tables Названия стоящие за этой опцией, будут считаться именами таблиц.
--triggers Включает в backup триггеры, для каждой таблицы. Отменить действие можно с помощью --skip-triggers.
--user= имя_пользователя, -u имя_пользователя Имя юзера для подключения к серверу MySQL.
--verbose, -v Выводит информацию в ходе выполнения программы.
--where="where_условие", -w "where_условие" Сбрасывает в дамп информацию, выбранную условием WHERE.
--xml, -X Создает дамп в формате XML

Делать резервные копии (бэкапы) очень важно для серьезных проектов, в которых часто обновляются данные. Для интернет магазинов это просто архиважно, ведь база может испортиться в любой момент по самым разным причинам. А если в этой базе важные данные пользователей, разные статистики или данные по заказам? Лучше потратить пару часов драгоценного времени и настроить автоматическое создание резервных копий и спать спокойно.

Для создания бэкапов у mysql есть утилита mysqldump. Её то мы и будем использовать. Для тестирования можем зайти на сервер по SSH либо пробовать на локальной базе. Синтаксис команды прост:

mysqldump -uLOGIN -hHOST -pPASS DBNAME > backup.sql

Тут всё интуитивно понятно. LOGIN — имя пользователя базы, PASS — его пароль, а HOST — имя или айпи адрес сервера, в большинстве случаев это localhost, хотя зависит от хостинга. DBNAME — имя базы для которой делаем бэкап. mysqldump — непосредственно сама команда. backup.sql — имя файла, в который будет помещен дамп, перед именем файла можно и даже нужно указывать папку, например /home/backups/backup.sql. Иногда перед командой нужно дописать путь к папке в которой лежит утилита, на UNIX серверах это как правило /usr/bin/, в этом случае команда будет выглядеть так:

/usr/bin/mysqldump -uLOGIN -hHOST -pPASS DBNAME > backup.sql

Допустим мы хотим сделать бэкап для базы testing и подключаемся мы обычно к ней под пользователем root с паролем 123456.

mysqldump -uroot -hlocalhost -p123456 testing > backup.sql

Иногда бывает необходимость сохранять только некоторые таблицы базы, например когда в базе есть большие неизменяющиеся таблицы, тогда чтобы не напрягать лишний раз сервер нужно указывать какие именно таблицы должны «забэкапится» . Таблицы указываются после имени базы и перечисляются через пробел

mysqldump -uroot -hlocalhost -p123456 testing table1 table2 table3 > backup.sql

Если мы хотим забэкапить все базы на сервере добавляем ключ —all-databases

mysqldump —all-databases -uroot -hlocalhost -p123456 > backup.sql

Если хотим сэкономить место на диске, бэкап можно сразу архивировать

mysqldump -uroot -hlocalhost -p123456 testing | gzip> backup.sql

Очень удобно в названии файла помещать дату дату бэкапа

mysqldump -uroot -hlocalhost -p123456 testing | gzip> `date «+%Y-%m-%d»`_backup.sql

Я обычно пользуюсь такой схемой

mysqldump -uroot -p123456 testing > /usr/home/backups/`date «+%d»`.sql

Таким образом у меня в папке бэкапов хранится 31 файл и я могу восстановить базу любого дня последнего месяца. Название файла является числом.

Ну и теперь об автоматизации. В этом деле нам поможет планировщик, в UNIX системах за это отвечает утилита CRON. В панеле хостинга вы должны найти её без проблем, просто добавьте туда команду бэкапа с указанием частоты и времени исполнения. Я обычно устанавливаю ежесуточный бэкап в 3 ночи.

Если же найти утилиту не получается в интерфейса хостинга, попробуйте добавить команду крона через SSH. Выполните команду crontab -e и создайте приблизительно такое правило:

0 3 * * * mysqldump -uroot -hlocalhost -p123456 testing > backup.sql

Эта запись говорит планировщику, что необходимо запускать команду «mysqldump -uroot -hlocalhost -p123456 testing > backup.sql» каждый день в 3 часа 0 минут.

Ну и напоследок дополнительные настройки, которые может принимать утилита mysqldump:

—add-drop-database
Добавляет DROP DATABASE перед каждым оператором CREATE DATABASE.

—add-drop-table
Добавляет DROP TABLE перед каждым оператором CREATE TABLE.

—add-locks
Добавляет LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы (для ускорения доступа к MySQL).

—all-databases, -A
Сохраняет все таблицы из всех баз данных, которые находятся под управлением текущего сервера.

—allow-keywords
Разрешить создавать имена столбцов, которые совпадают с ключевыми словами. Отсутствие конфликтов обеспечивается прибавлением имени таблицы в качестве префикса к имени каждого столбца.

—comments, -i
Данный параметр позволяет добавить в дамп дополнительную информацию, такую, как версия mysqldump, версия MySQL, имя хоста, на котором расположен сервер MySQL.

—compact
Данный параметр требует от mysqldump создать дамп, используя как можно более компактный формат. Параметр является противоположным —comments.

—compatible=name
Параметр генерирует вывод, который совместим с другими СУБД или более старыми версиями MySQL. Вместо ключевого слова name можно использовать: «ansi», «mysql323», «mysql40», «postgresql», «oracle», «mssql», «db2», «maxdb», «no_key_options», «no_table_options», «no_field_options». Можно использовать несколько значений, разделив их запятыми.

—complete-insert, -c
Используется полная форма оператора INSERT (с именами столбцов).

—create-options
Добавляет дополнительную информацию в операторы CREATE TABLE. Это может быть тип таблицы, начальное значение AUTO_INCREMENT и другие параметры.

—databases, -B
Параметр позволяет указать имена нескольких баз данных, для которых необходимо создать дамп.

—delayed
Использовать команду INSERT DELAYED при вставке строк.

—delete-master-logs
На главном сервере репликации автоматически удаляются бинарные логи (logbin) после того, как дамп был успешно создан при помощи mysqldump. Этот параметр автоматически включает параметр «—master-data».

—disable-keys, -K
Для каждой таблицы, окружает оператор INSERT выражениями /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; и /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; в выводе результата дампа. Это ускорит загрузку данных на сервер для таблиц типа MyISAM, так как индексы создаются после внесения всех данных.

—extended-insert, -e
Использовать команду INSERT с новым многострочным синтаксисом (повышает компактность и быстродействие операторов ввода).

—flush-logs, -F
Записать на диск данные системного журнала из буфера MySQL-сервера перед началом выполнения дампа.

—force, -f
Продолжать даже если в процессе создания дампа произошла ошибка.

—hex-blob
Параметр позволяет представить бинарные данные в полях типа BINARY, VARBINARY, BLOB и BIT в шестнадцатеричном формате. Так последовательность «abc» будет заменена на 0×616263.

—ignore-table=db_name.tbl_name
Позволяет игнорировать таблицу tbl_name базы данных db_name при создании дампа. Если из дампа необходимо исключить несколько таблиц, необходимо использовать несколько параметров «—ignore-table», указывая по одной таблице в каждом из параметров.

—insert-ignore
Добавляет ключевое слово IGNORE в оператор INSERT.

—lock-all-tables, -x
Указание этого параметра приводит к блокировке всех таблиц во всех базах данных на время создания полного дампа всех баз данных.

—lock-tables, -l
Указание этого параметра приводит к блокировке таблиц базы данных, для которой создается дамп.

—no-autocommit
Включает все операторы INSERT, относящиеся к одной таблице, в одну транзакцию, что приводит к увеличению скорости загрузки данных.

—no-create-db, -n
Подавляет создание в дампе операторов CREATE DATABASE, которые автоматически добавляются при использовании параметров —databases и —all-databases.

—no-data, -d
Подавляет создание операторов INSERT в дампе, что может быть полезно при создании дампа структуры базы данных без самих данных.

—opt
Параметр предназначен для оптимизации скорости резервирования данных и является сокращением, включающим следующие опции: —quick —add-drop-table —add-locks —create-options —disable-keys —extended-insert —lock-tables —set-charset. Начиная с MySQL 4.1, параметр —opt используется по умолчанию, т.е. все вышеперечисленные параметры включаются по умолчанию, даже если они не указываются. Для того чтобы исключить такое поведение, необходимо воспользоваться параметров —skip-opt

—order-by-primary
Указание параметра приводит к тому. что каждая таблица сортируется по первичному ключу или первому уникальному индексу.

—port, -P
Номер TCP порта, используемого для подключения к хосту.

—protocol={TCP|SOCKET|PIPE|MEMORY}
Параметр позволяет задать протокол подключения к серверу.

—quick, -q
Позволяет начать формирование дампа, не дожидаясь полной загрузки данных с сервера и экономя тем самым память.

—quote-names, -Q
Помещает имена баз данных, таблиц и столбцов в обратные апострофы `. Начиная с MySQL 4.1, данный параметр включен по умолчанию.

—replace
Добавляет ключевое слово REPLACE в оператор INSERT. Данный параметр впервые появился в MySQL 5.1.3.

—result-file=/path/to/file, -r /path/to/file
Параметр направляет дамп в файл file. Этот параметр особенно удобен в Windows, без использования командной строки. когда можно перенаправить результат в файл при помощи последовательностей > и >>.

--routines, -R
Данный параметр создает дамп хранимых процедур и функций. Доступен с MySQL 5.1.2.

—single-transaction
Параметр создает дамп в виде одной транзакции.

skip-comments
Данный параметр позволяет подавить вывод в дамп дополнительной информации.

—socket=/path/to/socket, -S /path/to/socket
Файл сокета для подсоединения к localhost.

—tab=/path/, -T /path/
При использовании этого параметра в каталоге path для каждой таблицы создаются два отдельных файла: tbl_name.sql, содержащий оператор CREATE TABLE, и tbl_name.txt, который содержит данные таблиц, разделенные символом табуляции. Формат данных может быть переопределен явно с помощью параметров —fields-xxx и —lines-xxx.

—tables
Перекрывает действия параметра —databases (-B). Все аргументы, следующие за этим параметром, трактуются как имена таблиц.

—triggers
Создается дамп триггеров. Этот параметр включен по умолчанию. для его отключения следует использовать параметр —skip-triggers.

—tz-utc
при использовании данного параметра в дамп будет добавлен оператор вида SET TIME_ZONE=’+00:00′, который позволит обмениваться дампа в различных временных зонах.

—verbose, -v
Расширенный режим вывода. Вывод более детальной информации о работе программы.

--version, -V
Вывести информацию о версии программы.

—where=’where-condition’, -w ‘where-condition’
Выполнить дамп только выбранных записей. Обратите внимание, что кавычки обязательны: «—where=user=’test’» «-wuserid>1″ «-wuserid<1″

—xml, -X
Представляет дамп базы данных в виде XML.

first-slave, -x
Блокирует все таблицы во всех базах данных.

--debug=…, -#
Отслеживать прохождение программы (для отладки).

—help
Выводится справка и завершается работа программы.

Под ИТ-инфраструктурой предприятия понимается вся совокупность имеющихся в ней технических, сетевых, общесистемных программных средств и набор сервисов функционирующих на этих средствах.

Технические средства IT-инфраструктуры включают в себя:

  • физические сервера;
  • сети передачи данных, активное и пассивное сетевое оборудование (включая телефонию);
  • рабочие станции пользователей;
  • средства оргтехники.

Технические средства это та часть IT-инфраструктуру, где нельзя обойтись без прямых финансовых вложений – железо надо покупать. Но даже затраты на технические средства можно минимизировать грамотно используя бесплатное свободное программное обеспечение.

Совсем другое дело обстоит с общесистемным программным обеспечением. Необоснованно тратить большие деньги на проприетарное (платное, коммерческое) системное программное программное обеспечение для большинства малых и средних предприятий ненужная роскошь.

Вполне можно обойтись бесплатным программным обеспечением с открытым исходным кодом – как его сейчас называют – свободным программным обеспечением (ПО). Более того: грамотно построенная общесистемная часть IT-инфраструктуры работать будет намного быстрее и надежнее. Не будет ограничений на масштабирование, так как не будет необходимости дозакупки лицензий на развитие и расширение функционала. Причем для конечного пользователя все будет абсолютно прозрачно и он даже не поймет на чем базируется системное программное обеспечение.

Базовое системное программное обеспечение IT-инфраструктуры

Операционная система

Во всем мире наметилась тенденция к использованию в качестве базовой серверной операционной системы того или иного дистрибутива Linux.

За небольшим исключением все они бесплатны, с открытым исходным кодом и распространяются по лицензиям GPL или BSD. Все Linux системы отличаются чрезвычайной надежностью и защищенностью. Крайне редкие уязвимости в системах очень быстро выявляются и исправляются сообществами разработчиков по всему миру.

В качестве серверной операционной системы мы предпочитаем и крайне рекомендуем наиболее динамично и быстро развивающуюся . Очень надежная и продуманная система – это подтверждает наш многолетний опыт работы с ней. Основным разработчиком и спонсором является компания Canonical. В настоящее время проект активно развивается и поддерживается свободным сообществом.

Более того, Ubuntu используется как официальная операционная система в Китае. Официально объявлено о совместной работе с китайским правительством над версией Ubuntu для населения Китая. На сайте появилась новая ветка – Ubuntu Kylin (официальное название китайской ветки дистрибутива), который развивается параллельно с основным дистрибутивом и в основном сообществом китайских разработчиков.

Система достаточно хорошо русифицирована, хотя для серверной ОС это особого значения не имеет. Лучше использовать версии LTS (Long Term Support – поддержка в течение длительного периода) – в настоящее время 14.04LTS.

Виртуализация

Давно прошло то время, когда IT-инфраструктуру строили по модели “одна прикладная система – один физический сервер”. Теперь на одном физическом сервере благодаря системам виртуализации функционирует несколько прикладных систем, иногда под разными операционными системами в различных виртуальных машинах. Их количество зависит только от вычислительной мощности физического сервера (хоста) и, иногда, грамотного расчета ресурсов, потребляемого виртуальными машинами и распределения между ними функционала.

В настоящее время во всем мире все больше проявляется тенденция к переходу на свободное программное обеспечение при выборе системы виртуализации. К сожалению в России это не так – основной упор до сих пор делается на коммерческие (очень не дешевые) продукты Microsoft и VMware, хотя существуют бесплатные продукты с открытым исходным кодом не уступающие, а зачастую и превосходящие их по надежности и функциональным возможностям.

Для построения IT-инфраструктуры целесообразно использовать разумное сочетание двух технологий виртуализации – контейнерную (виртуализация на уровне операционной системы), как более простую и футкционирующую без накладных расходов и полную, аппаратную виртуализацию.

В Ubuntu 14.04 появилась промышленная версия давно известной системы контейнерной виртуализации с длительным сроком поддержки (5 лет). Технология LXC была известна и активно использовалась уже давно, очень успешно и даже, на свой страх и риск, в промышленных системах. Промышленная версия отличается от предыдущих еще большей надежностью, стабильностью и расширенным функционалом.

Предназначена для запуска в изолированных контейнерах отдельных экземпляров Linux-подобных операционных систем. Очень удобна для обеспечения функционирования различных прикладных систем работающих по web-технологии – web-сайтов, информационных порталов, систем совместной работы (DMS, ERP, CRM,…) и т.п.

В качестве системы полной виртуализации наиболее целесообразно использовать – современную технологию аппаратной виртуализации в разработке которой участвуют не только представители сообщества разработчиков, но и такие компании как IBM, Intel, HP, RedHat и др. Не смотря на солидность компаний – участников разработки система остается свободной, бесплатной, с открытым исходным кодом.

На виртуальных машинах KVM можно запустить практически любую операционную систему – Linux, Windows, Solaris, BSD и т.п.

По надежности, функциональным возможностям и скорости работы KVM во многом превосходит свои коммерческие аналоги.

Утилита mysqldump служит для резервирования и восстановления резервных копий (часто называются "дампами") баз данных и таблиц MySQL. Утилита предназначена для командной строки и работает под операционными системами Windows, FreeBSD и некоторыми другими. Mysqldump является свободнораспространяемым ПО, не требующим обязательной оплаты.

Для локального копирования баз данных MySQL с типом таблиц ISAM и MyISAM лучше использовать утилиту, написанную на Perl: mysqlhotcopy . Работает она намного быстрее, чем mysqldump, так как копирует файлы баз данных *.frm, *.myd и *.myi целиком, предварительно заблокировав таблицы. Также, для корректной работы mysqlhotcopy необходимо наличие Unix-утилит: cp или scp. Для таблиц типа InnoDB mysqlhotcopy не подойдет, так как не все файлы таблиц InnoDB хранятся в стандартной директории БД MySQL.

Примеры использования mysqldump

Основной синтаксис mysqldump таков:

mysqldump [ OPTIONS] database [ tables]
mysqldump [ OPTIONS] -- databases [ OPTIONS] DB1 [ DB2 DB3... ]
mysqldump [ OPTIONS] -- all- databases [ OPTIONS]

Не указывая имена таблиц или используя параметры --databases или --all-databases, будет получен дамп всех баз данных находящихся в MySQL.

Записать дамп БД с удаленного сервера MySQL с адресом 127.0.0.2 на локальный компьютер в файл dump_db.sql:

mysqldump - uroot - h127.0.0.2 - p db_name > dump_db.sql

Восстановить базу MySQL db_name на удаленном сервере по адресу 127.0.0.2 с дампа, расположенного на локальном компьютере, в файле dump_db.sql:

mysql - uroot - h127.0.0.2 - p db_name < dump_db.sql

Записать дамп баз данных MySQL (database1, database2, database3), находящихся на удаленном сервере по адресу 127.0.0.2 в локальный файл dump_db.sql:

mysqldump - uroot - h127.0.0.2 - p - B database1 database2 database3 > dump_db.sql

Выборка не более 50 записей (напремер для тестирования не нужна полная копия БД):

Скопировать базы данных MySQL на удаленный компьютер:

mysqldump -- opt database | mysql -- host= remote- host - C database

Скопировать только структуру базы данных MySQL:

mysqldump - uroot - hh127.0.0.2 - p -- no- data my_dbname > my_db_structure.sql

Утилита mysqldump, используемая без опций --opt или --quick, перед тем, как сделать дамп результата выборки информации, запишет весь результат своей работы в память. Это может вызвать проблемы при получении дампа большой базы данных. Также следует учесть, что нет необходимости применять параметры --opt или -e, если предполагается использовать для получения дампа новую копию программы mysqldump, а затем воспроизводить его на очень старом MySQL-сервере.

Все параметры утилиты mysqldump можно просмотреть, запустив ее так:

mysqldump --help

Стандартный перечень параметров mysqldump с кратким описанием опубликован ниже:

--add-drop-database
Добавляет DROP DATABASE перед каждым оператором CREATE DATABASE.

--add-drop-table
Добавляет DROP TABLE перед каждым оператором CREATE TABLE.

--add-locks
Добавляет LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы (для ускорения доступа к MySQL).

--all-databases, -A
Сохраняет все таблицы из всех баз данных, которые находятся под управлением текущего сервера.

--allow-keywords
Разрешить создавать имена столбцов, которые совпадают с ключевыми словами. Отсутствие конфликтов обеспечивается прибавлением имени таблицы в качестве префикса к имени каждого столбца.

--comments, -i
Данный параметр позволяет добавить в дамп дополнительную информацию, такую, как версия mysqldump, версия MySQL, имя хоста, на котором расположен сервер MySQL.

--compact
Данный параметр требует от mysqldump создать дамп, используя как можно более компактный формат. Параметр является противоположным --comments.

--compatible=name
Параметр генерирует вывод, который совместим с другими СУБД или более старыми версиями MySQL. Вместо ключевого слова name можно использовать: «ansi», «mysql323», «mysql40», «postgresql», «oracle», «mssql», «db2», «maxdb», «no_key_options», «no_table_options», «no_field_options». Можно использовать несколько значений, разделив их запятыми.

--complete-insert, -c
Используется полная форма оператора INSERT (с именами столбцов).

--create-options
Добавляет дополнительную информацию в операторы CREATE TABLE. Это может быть тип таблицы, начальное значение AUTO_INCREMENT и другие параметры.

--databases, -B
Параметр позволяет указать имена нескольких баз данных, для которых необходимо создать дамп.

--delayed
Использовать команду INSERT DELAYED при вставке строк.

--delete-master-logs
На главном сервере репликации автоматически удаляются бинарные логи (logbin) после того, как дамп был успешно создан при помощи mysqldump. Этот параметр автоматически включает параметр «--master-data».

--disable-keys, -K

Для каждой таблицы, окружает оператор INSERT выражениями /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; и /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; в выводе результата дампа. Это ускорит загрузку данных на сервер для таблиц типа MyISAM, так как индексы создаются после внесения всех данных.

--extended-insert, -e
Использовать команду INSERT с новым многострочным синтаксисом (повышает компактность и быстродействие операторов ввода).

--flush-logs, -F
Записать на диск данные системного журнала из буфера MySQL-сервера перед началом выполнения дампа.

--force, -f
Продолжать даже если в процессе создания дампа произошла ошибка.

--hex-blob
Параметр позволяет представить бинарные данные в полях типа BINARY, VARBINARY, BLOB и BIT в шестнадцатеричном формате. Так последовательность «abc» будет заменена на 0×616263.

--ignore-table=db_name.tbl_name
Позволяет игнорировать таблицу tbl_name базы данных db_name при создании дампа. Если из дампа необходимо исключить несколько таблиц, необходимо использовать несколько параметров «--ignore-table», указывая по одной таблице в каждом из параметров.

--insert-ignore
Добавляет ключевое слово IGNORE в оператор INSERT.

--lock-all-tables, -x
Указание этого параметра приводит к блокировке всех таблиц во всех базах данных на время создания полного дампа всех баз данных.

--lock-tables, -l
Указание этого параметра приводит к блокировке таблиц базы данных, для которой создается дамп.

--no-autocommit
Включает все операторы INSERT, относящиеся к одной таблице, в одну транзакцию, что приводит к увеличению скорости загрузки данных.

--no-create-db, -n
Подавляет создание в дампе операторов CREATE DATABASE, которые автоматически добавляются при использовании параметров --databases и --all-databases.

--no-data, -d
Подавляет создание операторов INSERT в дампе, что может быть полезно при создании дампа структуры базы данных без самих данных.

--opt
Параметр предназначен для оптимизации скорости резервирования данных и является сокращением, включающим следующие опции: --quick --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --set-charset. Начиная с MySQL 4.1, параметр --opt используется по умолчанию, т.е. все вышеперечисленные параметры включаются по умолчанию, даже если они не указываются. Для того чтобы исключить такое поведение, необходимо воспользоваться параметров --skip-opt

--order-by-primary
Указание параметра приводит к тому. что каждая таблица сортируется по первичному ключу или первому уникальному индексу.

--port, -P
Номер TCP порта, используемого для подключения к хосту.

--protocol={TCP|SOCKET|PIPE|MEMORY}
Параметр позволяет задать протокол подключения к серверу.

--quick, -q
Позволяет начать формирование дампа, не дожидаясь полной загрузки данных с сервера и экономя тем самым память.

--quote-names, -Q
Помещает имена баз данных, таблиц и столбцов в обратные апострофы `. Начиная с MySQL 4.1, данный параметр включен по умолчанию.

--replace
Добавляет ключевое слово REPLACE в оператор INSERT. Данный параметр впервые появился в MySQL 5.1.3.

--result-file=/path/to/file, -r /path/to/file
Параметр направляет дамп в файл file. Этот параметр особенно удобен в Windows, без использования командной строки. когда можно перенаправить результат в файл при помощи последовательностей > и >>.

--routines, -R
Данный параметр создает дамп хранимых процедур и функций. Доступен с MySQL 5.1.2.

--single-transaction
Параметр создает дамп в виде одной транзакции.

--skip-comments
Данный параметр позволяет подавить вывод в дамп дополнительной информации.

--socket=/path/to/socket, -S /path/to/socket
Файл сокета для подсоединения к localhost.

--tab=/path/, -T /path/
При использовании этого параметра в каталоге path для каждой таблицы создаются два отдельных файла: tbl_name.sql, содержащий оператор CREATE TABLE, и tbl_name.txt, который содержит данные таблиц, разделенные символом табуляции. Формат данных может быть переопределен явно с помощью параметров --fields-xxx и --lines-xxx.

--tables
Перекрывает действия параметра --databases (-B). Все аргументы, следующие за этим параметром, трактуются как имена таблиц.

--triggers
Создается дамп триггеров. Этот параметр включен по умолчанию. для его отключения следует использовать параметр --skip-triggers.

--tz-utc
при использовании данного параметра в дамп будет добавлен оператор вида SET TIME_ZONE="+00:00", который позволит обмениваться дампа в различных временных зонах.

--verbose, -v
Расширенный режим вывода. Вывод более детальной информации о работе программы.

--version, -V
Вывести информацию о версии программы.

--where="where-condition", -w "where-condition"
Выполнить дамп только выбранных записей. Обратите внимание, что кавычки обязательны: "--where=user="test"" "-wuserid>1" "-wuserid

--xml, -X
Представляет дамп базы данных в виде XML.

--first-slave, -x
Блокирует все таблицы во всех базах данных.

--debug=..., -#
Отслеживать прохождение программы (для отладки).

--help
Выводится справка и завершается работа программы.

Mysqldump - документация и примеры.

Дамп и восстановление базы данных MySQL

Дамп и восстановление базы данных MySQL довольно просто и удобно делать удаленно через SSH или прямо через консоль сервера. Удаленно, это можно делать используя программы Putty/Kitty. Также указанные ниже примеры Вы можете выполнять и на Windows запустив командную строкуcmd ‘. Ниже приведены примеры о том, как создавать дампы базы данных MySQL и затем восстанавливать их при необходимости, например для Вашего сайта, интернет-магазина или какого либо другого проекта.

Создание дампа базы данных MySQL

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

# Бекап одной базы данных в файл dump_file.sql
mysqldump -uroot -p your_base > dump_file.sql

# На windows дамп лучше всего создавать немного другой командой, которая предотвращает

# случайное затирание строк дампа из за конвертации символов перевода строки ‘\r\n’ в ‘\n’
mysqldump -uroot -p your_base -r dump_file_utf8.sql

# Если Вам нужен бекап только отдельных таблиц, а не всей базы данных

# (указываем наименования таблиц через пробел после названия базы данных)
mysqldump -uroot -p your_base TABLE1 TABLE2 TABLE3 > dump_file.sql

# Если нужно создать бекап только структуры базы данных без самих данных

mysqldump -uroot -p —no-data your_base > dump_file.sql

# Бекап всех баз данных в файл текущая_дата.gz

mysqldump -uroot -p —all_databases | gzip -c > ‘date «+%Y-%m-%d»‘.gz

# Бекап, где для каждой записи создается отдельный INSERT

# и с явным указанием кодировки базы данных UTF-8
mysqldump -uroot -p —default-character-set=utf8 your_base —extended-insert=FAL

В приведенном выше примере, для создания бекапа используется утилита mysqldump , которая входит в состав mysql. Далее указываются параметры для создания бекапа базы данных, которые разберем подробнее:

  • -u – параметр указывает логин, который будет использоваться для подключения к базе данных. В примере мы используем логин root, который нужно указать в этом параметре без пробела! В результате у нас это выглядит как -uroot
  • -p – параметр указывает что нужно ввести пароль для указанного логина. Мы его оставили пустым, в результате чего пароль нужно будет ввести после нажатия “Enter” при выполнении команды. Тем не менее, можно указать пароль сразу же здесь, как и в параметре логина, без пробела после -p, однако этот способ не является безопасным, так как консоль сохраняет Ваши команды в лог файл и если Вы его регулярно не очищаете, то он может быть просмотрен злоумышленником.
  • your_base – вместо этой строки в примере, вам необходимо указать реальное имя Вашей базы данных, для которой Вы создаете бекап.
  • > – оператор который показывает направление действия, т.е. как бы указывает, что вы собираетесь сделать запись из базы в файл.
  • sql – это название Вашего файла.slq в которую нужно сохранить Вашу базу данных. Он указывается через пробел после оператора ‘>’. Вы можете задать любое другое имя. Например, чтобы в имени система автоматически вставила текущее время, достаточно указать строку вида:

после этой строки в примере указывается расширение файла ‘.gz ‘. В результате будет создан файл вида ‘2014-11-15.gz ‘.

  • Во втором примере, вместо оператора ‘> ‘ используется оператор ‘| ‘, который указывает на необходимость выполнения дополнительной команды gzip c параметром ‘-c ‘ которая позволяет сразу же запаковать дамп в архив, а только затем сохранить его в файл вида ‘2014-11-15.gz ‘, о чем сообщает оператор ‘> ‘.
  • Параметр –no-data позволяет создать дамп только структуры базы данных без самих данных. В некоторых случаях довольно полезно, когда данные не нужны.
  • Параметры–default-character-set=utf8 и –extended-insert=FALSE . Первый позволяет Вам явно указать кодировку, которая используется этой базой данных, тем самым избежать сохранение базы в неверной кодировке Вместо utf8 можно указать любую другую кодировку, например cp1251 . Второй параметр позволяет указать, что при экспорте для каждой записи необходимо создать отдельную команду INSERT. В некоторых случаях это может потребоваться при частичном восстановлении данных из дампа.

Восстановление базы данных из файла дампа MySQL

Теперь рассмотрим с Вами обратный процесс восстановления базы данных из файла дампа. Данное действие выполняется при помощи программы mysql. Рассмотрим сразу же пример.

Здесь также используются параметры ‘-u ‘ и ‘-p ‘, которые указывают на логин и пароль для подключения к базе данных аналогично утилите mysqldump , рассмотренной в предыдущем примере. После этого идет название базы данных, а также файла, из которого необходимо восстановить данные. Между ними ставится оператор ‘<‘ который указывает направление, что мы хотим импортировать данные в базу из файла.