[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Как создать нормальный дамп базы
Вторник, 30.09.2014, 13:25 | Сообщение # 1

Ранг
Центурион
Сообщений:
1124
Статус:
Награды:
473
Как вижу в данный момент все стараются создавать дампы через всякие GUI для работы с базой или вовсе не умеют создавать нормальных дампов. В создании нормального дампа базы нет ничего сложного и сейчас я расскажу как это делается.

Примеры и описание будут сделаны для операционной системы windows. Для nix систем - почти тоже самое.
Описание ориентируется на новичков, так что будет много лишней информации.

Самый простой и лучший способ - использовать стандартную утилиту mysqldump, которая есть в комплекте с mysql.

Начнём с самого начала:

* У меня стоит вебсервер xampp и он находится на диске D в папке webserver. Бинарники mysql находятся в папке webserver\mysql\bin. Там и находится утилита mysqldump.exe и сам файл mysql.exe.

1. Для начала нужно открыть windows консоль и изменить путь до нужной папки:
  • 1 Чтобы открыть консоль для начала нужно открыть меню "выполнить". Для этого нужно воспользоваться сочетанием клавиш Windows + R. Далее в открывшееся окно ввести текст cmd и нажать enter (или кнопку "ок"). Затем откроется окно с таким содержанием:



Цитата
Microsoft Windows [Version 6.1.7601]
© Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Pradmure>

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, то строка будет такой:

Цитата
mysqldump -h 192.168.48.1 -u root -p6655 world > C:\world.sql


(если соединиться не удалось, то будет выведена соответствующая ошибка)

Дамп что мы создали будет выглядеть как в TDB. Исключением будет дамп процедур. Чтобы добавить в наш файл дамп процедур нужно добавить параметр --routines.
Пример:

Цитата
mysqldump -u root -p6655 --routines world > C:\world.sql


Но и тут нас будет поджидать неприятность. В mysql нету параметра, который бы удалял definer (создатель) у процедуры. Так что для каждой процедуры у нас будет лишняя строка /*!50020 DEFINER=`root`@`localhost`*/. Лишняя она тем, что если конкретно указать кто создал процедуру, то если сменится логин или хост пользователя, то будет писать ошибку о том, что не существует пользователя, который создал эту процедуру. Решением будет просто создать такого пользователя. Но это не особо хорошо.
Для 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 для дампа определённых таблиц.Некоторые интересные параметры для создания дампов:--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 - откудаПримечание: база уже должна быть создана перед заливкой дампа.


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

  • Страница 1 из 1
  • 1
Поиск:


immortals
Наверх

copyright 2024 immortals сообщество людей и Warcraft

Мобильная версияЭтот сайт защищен «Site Guard» Мы в Контакте
Les immortals ©2013- 2024.