Как создать нормальный дамп базы
Описание
Как вижу в данный момент все стараются создавать дампы через всякие 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 - откуда
Примечание: база уже должна быть создана перед заливкой дампа.
Вот в принципе и всё. Такой способ залития - самый быстрый, а формат создания дампов - самый удобный, наглядный и быстрый, для залития обратно в базу.
Рекомендуемые комментарии
Комментариев нет