Как создать нормальный дамп базы
				
			
		
		
		
		Описание
Как вижу в данный момент все стараются создавать дампы через всякие GUI для работы с базой или вовсе не умеют создавать нормальных дампов. В создании нормального дампа базы нет ничего сложного и сейчас я расскажу как это делается.
Примеры и описание будут сделаны для операционной системы windows. Для nix систем - почти тоже самое. 
Описание ориентируется на новичков, так что будет много лишней информации. 
Самый простой и лучший способ - использовать стандартную утилиту mysqldump, которая есть в комплекте с mysql.
Начнём с самого начала:
* У меня стоит вебсервер xampp и он находится на диске D в папке webserver. Бинарники mysql находятся в папке webserver\mysql\bin. Там и находится утилита mysqldump.exe и сам файл mysql.exe.
1. Для начала нужно открыть windows консоль и изменить путь до нужной папки:
 Чтобы открыть консоль для начала нужно открыть меню "выполнить". Для этого нужно воспользоваться сочетанием клавиш Windows + R. Далее в открывшееся окно ввести текст cmd и нажать enter (или кнопку "ок"). Затем откроется окно с таким содержанием: 
Microsoft Windows [Version 6.1.7601] 
© Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены. 
C:\Users\Influense> 
 
2. Далее нужно перейти в папку D:\webserver\mysql\bin. Для этого в консоль вводим следующее: 
C:\Users\Pradmure>cd /D D:\webserver\mysql\bin
команда cd - для смены директории, а параметр /D для того что бы указать что мы собираемся сменить диск с C: на D: (параметр всегда /D и не зависит от имени диска. Так что если бы у меня был диск F, то я всё равно писал бы cd /D F:\webserver\mysql\bin) 
Далее мы окажемся в нужной папке и в консоли это будет выглядеть так (показываю только последнюю строку): 
Далее мы окажемся в нужной папке и в консоли это будет выглядеть так (показываю только последнюю строку): 
D:\webserver\mysql\bin>
Процесс дампа и заливки файлов через консоль: 
2. Теперь можно приступать к использованию утилиты mysqldump или заливке дампов.
1. Создание дампа базы. 
Например мне нужно сделать дамп базы characters и сохранить этот дамп на диск C в файл world.sql. Для этого я обращаюсь к файлу mysqldump с некоторыми параметрами. 
Пример дампа базы world в файл world.sql на диск C: 
mysqldump -u root -p6655 world > C:\world.sql
После нажатия enter пройдёт несколько секунд и будет создан файл world.sql на диске C со всеми данными, структурой, дропом и созданием таблиц нашей базы. 
Теперь подробнее: параметр -u применяется для указания имени пользователя базы данных, а -p для пароля (после параметра -p так и нужно писать пароль без пробела от параметра. Для параметра -u можно ставить пробел, но для -p нельзя). Далее указывается база, дамп которой мы будем делать, а после неё - место куда будем записывать дамп.
Внимание: логин и пароль чувствительны к регистру. Так что если вы напишите -u Root, а пользователь у вас root, то получите ошибку о том, что не удаётся соединиться с сервером по таким данным.
Если mysql сервер находится не на локальной машине то нужно указывать параметр -h (host). Например если mysql сервер находится на ip 192.168.48.1, то строка будет такой:
192.168.48.1, то строка будет такой:
mysqldump -h 192.168.48.1 -u root -p6655 world > C:\world.sql
mysqldump -u root -p6655 --routines world > C:\world.sql
Дамп что мы создали будет выглядеть как в TDB. Исключением будет дамп процедур. Чтобы добавить в наш файл дамп процедур нужно добавить параметр --routines. 
Пример: 
Но и тут нас будет поджидать неприятность. В mysql нету параметра, который бы удалял definer (создатель) у процедуры. Так что для каждой процедуры у нас будет лишняя строка /*!50020 DEFINER=`root`@`localhost`*/. Лишняя она тем, что если конкретно указать кто создал процедуру, то если сменится логин или хост пользователя, то будет писать ошибку о том, что не существует пользователя, который создал эту процедуру. Решением будет просто создать такого пользователя. Но это не особо хорошо. 
Для linux можно использовать команду 
Для linux можно использовать команду
mysqlsump -u root -p6655 --routines world | sed "s/\/\*[^\/]*DEFINER.*\*\///" > dump.sql
Таким образом создастся файл без Definer'ов, но у windows нет команды sed. Только если установить cygwin с sed редактором (инструкцию по установке cygwin и установке "The GNU sed stream editor" писать не буду. Так как придётся использовать cygwin терминал, вместо командной строки. Поищите информацию в гугле, но если сильно нужно, то могу дописать). 
Если нужно сделать дамп всех баз, то нужно добавить параметр -A. Пример: 
mysqldump -u root -p6655 -A > C:\world.sql
Если нужно создать дамп нескольких баз, то нужно использовать параметр -B. Пример: 
mysqldump -u root -p6655 -B world characters auth > C:\all.sql
(создастся дамп в котором будут данные и структура баз world, characters и auth) 
Также можно использовать параметр --tables для дампа определённых таблиц. 
(создастся дамп в котором будут данные и структура баз world, characters и auth) 
Также можно использовать параметр --tables для дампа определённых таблиц. 
Некоторые интересные параметры для создания дампов:
--no-data "создаётся дамп только структуры базы без её содержимого" 
--no-create-info "дамп только данных без создания баз" 
--add-locks "добавляет LOCK TABLES перед занесением данных в базу. Ускоряет заливку дампа, но работать с базой будет нельзя пока не выполнится UNLOCK TABLE после занесения всех данных" 
-c "с этим параметром будет строится полный INSERT со всеми именами столбцов, а не просто количеством данных, которых ровно достаточно для вставки в таблицу" 
--ignore-table=база.имяТаблицы "исключает из дампа определённую таблицу. Например --ignore-table=characters.worldstates (не будет дампить таблицу worldstates из базы characters). Если нужно игнорировать несколько таблиц, то нужно несколько раз использовать этот параметр" 
(полный список параметров и их альтернативных названий можно найти в документации к mysql) 
Параметры можно комбинировать и использовать вместе.
2. Заливка дампа в базу.
В принципе заливать можете чем хотите, но самый быстрый способ - через консоль.
Чтобы залить нам нужно использовать второй из файлов о которых мы говорили в начале. Это mysql.exe 
Делаем те же действия чтобы попасть в папку с бинарниками, а затем используем команду: 
mysql -u root -p6655 world < C:\world.sql
И мы зальём наш дамп в базу world. Поменялось только направление стрелки. Параметры -u и -p означает тоже самое, что и для mysqldump. 
Если же нам хочется наблюдать за процессом заливки чтобы видеть сколько строк было затронуто при выполнение запросов, то делаем так: 
D:\webserver\mysql\bin>mysql -u root -p6655 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 35 
Server version: 5.5.27 MySQL Community Server (GPL) 
Copyright © 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use world 
Database changed 
mysql> \. C:\world.sql
Для начала мы открыли mysql консоль и нам выдали сообщение приветствия, затем переключились на базу world чтобы её использовать, и в конце залили дамп. 
\. означало место куда залить (прям сюда), а C:\world.sql - откуда 
Примечание: база уже должна быть создана перед заливкой дампа.
Вот в принципе и всё. Такой способ залития - самый быстрый, а формат создания дампов - самый удобный, наглядный и быстрый, для залития обратно в базу.

 
Рекомендуемые комментарии
Комментариев нет