Перейти к содержимому

Информация

  • Добавлен: May 16 2016 10:41 PM
  • Просмотров: 384
  • Автор мануала: Inf1u3ns
 


* * * * *
0 Рейтинг

Как создать нормальный дамп базы

(описывается как лучше сделать дамп и как его залить обратно)

Написано Influences on May 16 2016 10:41 PM

Как вижу в данный момент все стараются создавать дампы через всякие 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 - откуда

 

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

 

Вот в принципе и всё. Такой способ залития - самый быстрый, а формат создания дампов - самый удобный, наглядный и быстрый, для залития обратно в базу.

  • 0
Powered by Tutorials 1.4.2 © 2017, by Michael McCune