• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
[руководство] Как создать нормальный дамп базы
Прадмур
~
Как вижу в данный момент все стараются создавать дампы через всякие GUI для работы с базой или вовсе не умеют создавать нормальных дампов. В создании нормального дампа базы нет ничего сложного и сейчас я расскажу как это делается.

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


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

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

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

1. Для начала нужно открыть windows консоль и изменить путь до нужной папки:
  • 1 Чтобы открыть консоль для начала нужно открыть меню "выполнить". Для этого нужно воспользоваться сочетанием клавиш Windows + R. Далее в открывшееся окно ввести текст cmd и нажать enter (или кнопку "ок"). Затем откроется окно с таким содержанием:
    Quote
    Microsoft Windows [Version 6.1.7601]
    © Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

    C:\Users\Pradmure>

  • 2. Далее нужно перейти в папку D:\webserver\mysql\bin. Для этого в консоль вводим следующее:
    Quote
    C:\Users\Pradmure>cd /D D:\webserver\mysql\bin

    команда cd - для смены директории, а параметр /D для того что бы указать что мы собираемся сменить диск с C: на D: (параметр всегда /D и не зависит от имени диска. Так что если бы у меня был диск F, то я всё равно писал бы cd /D F:\webserver\mysql\bin)
    Далее мы окажемся в нужной папке и в консоли это будет выглядеть так (показываю только последнюю строку):
    Quote
    D:\webserver\mysql\bin>


Процесс дампа и заливки файлов через консоль:

2. Теперь можно приступать к использованию утилиты mysqldump или заливке дампов.
  • 1. Создание дампа базы.

    Например мне нужно сделать дамп базы characters и сохранить этот дамп на диск C в файл world.sql. Для этого я обращаюсь к файлу mysqldump с некоторыми параметрами.

    Пример дампа базы world в файл world.sql на диск C:
    Quote
    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, то строка будет такой:
    Quote
    mysqldump -h 192.168.48.1 -u root -p6655 world > C:\world.sql
    (если соединиться не удалось, то будет выведена соответствующая ошибка)

    Дамп что мы создали будет выглядеть как в TDB. Исключением будет дамп процедур. Чтобы добавить в наш файл дамп процедур нужно добавить параметр --routines.
    Пример:
    Quote
    mysqldump -u root -p6655 --routines world > C:\world.sql

    Но и тут нас будет поджидать неприятность. В mysql нету параметра, который бы удалял definer (создатель) у процедуры. Так что для каждой процедуры у нас будет лишняя строка /*!50020 DEFINER=`root`@`localhost`*/. Лишняя она тем, что если конкретно указать кто создал процедуру, то если сменится логин или хост пользователя, то будет писать ошибку о том, что не существует пользователя, который создал эту процедуру. Решением будет просто создать такого пользователя. Но это не особо хорошо.
    Для linux можно использовать команду
    Quote
    mysqlsump -u root -p6655 --routines world | sed "s/\/\*[^\/]*DEFINER.*\*\///" > dump.sql

    Таким образом создастся файл без Definer'ов, но у windows нет команды sed. Только если установить cygwin с sed редактором (инструкцию по установке cygwin и установке "The GNU sed stream editor" писать не буду. Так как придётся использовать cygwin терминал, вместо командной строки. Поищите информацию в гугле, но если сильно нужно, то могу дописать).

    Если нужно сделать дамп всех баз, то нужно добавить параметр -A. Пример:
    Quote
    mysqldump -u root -p6655 -A > C:\world.sql


    Если нужно создать дамп нескольких баз, то нужно использовать параметр -B. Пример:
    Quote
    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
    Делаем те же действия чтобы попасть в папку с бинарниками, а затем используем команду:
    Quote
    mysql -u root -p6655 world < C:\world.sql

    И мы зальём наш дамп в базу world. Поменялось только направление стрелки. Параметры -u и -p означает тоже самое, что и для mysqldump.

    Если же нам хочется наблюдать за процессом заливки чтобы видеть сколько строк было затронуто при выполнение запросов, то делаем так:
    Quote
    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 отредактировано Прадмур - Вторник, 13.11.2012, 02:18
Dinoza
para bellum
Молоток, но все равно многие будут создавать дампы через всякие гуи по типу navicat или sqlyog. Ибо влом открыть и глянуть тему.
Сообщение # 2 написано 13.11.2012 в 02:44
Прадмур
~
Quote (Dinoza)
Молоток, но все равно многие будут создавать дампы через всякие гуи по типу navicat или sqlyog. Ибо влом открыть и глянуть тему.

Подрастут и поймут, что всё таки нужно было создавать дамп именно так. А не тем более через навикат.
Сообщение # 3 написано 13.11.2012 в 02:55
exersist
-[Marsascala]-
Dinoza, открыть не влом, а прочитать влом) Если надо будет - почитаю) ++++

Добавлено (13.11.2012, 07:55)
---------------------------------------------
Блин не могу ++++ поставить( Опера глюкает

---||| Продаю акк в CrossFire тык |||---
---||| 3 капсульные оружия, 4 скина! Всего 1000руб.!!! |||---

Сообщение # 4 написано 13.11.2012 в 07:55
Dimitro
Praise the sun!
Quote (Прадмур)
Подрастут и поймут, что всё таки нужно было создавать дамп именно так.

Обоснуйте.

И в чем принципиальная преимущество использования консоли перед GUI (про навикат не говорим)?
Ну да, визуальный интерфейс для чайников, куда легче набрать >50 символов вручную, чем клацнуть два раза мышкой и указать путь к файлу, консоль это же так круто.
Опять же, все параметры в GUI добавляются одним-двумя кликами на чекбокс.

Да, я могу спокойно юзать и консоль, и юзаю ее, когда нет возможности заюзать GUI следовательно и сужу непредвзято.
Объясните мне тогда, зачем создаются GUI?
Или вы все операции в консоли проводите, от создания папки до правки реестра (если вы под виндой)?

GUI создаются для того, чтобы сократить время на ввод команд и сделать программу более наглядной (опять же, понадобился мне какой-то параметр, который я не помню или мало использую, для случая с консолью, мне придется лезть в доки и искать его, для GUI, он наверняка есть в интерфейсе на видном месте).

Суть того, что я тут написал, сводится к тому, что да, то, что вы написали полезно, да консоль использовать тоже в некоторых случаях удобно.
Но вот писать, что надо использовать ТОЛЬКО консоль, а все остальное неправильно, это смешно.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 5 отредактировано Dimitro - Вторник, 13.11.2012, 15:32
Прадмур
~
Quote (Dimitro)
Опять же, все параметры в GUI добавляются одним-двумя кликами на чекбокс.

Не видел ни одного GUI, который бы принимал параметры для дампа. Вот каким образом в GUI можно сделать дамп определённых значений в таблице?

Quote (Dimitro)
Объясните мне тогда, зачем создаются GUI?

На этот вопрос ты ответил сам.
Куда удобнее выполнять большинство действий в GUI, так как это не требует определённых знаний. Например, куда проще смотреть на содержимое базы через GUI, чем писать длинные запросы обращаясь например к information_schema, чтобы получить нужную информацию.

Quote (Dimitro)
Суть того, что я тут написал, сводится к тому, что да, то, что вы написали полезно, да консоль использовать тоже в некоторых случаях удобно.
Но вот писать, что надо использовать ТОЛЬКО консоль, а все остальное неправильно, это смешно.

Ты хоть читал? Я не говорил что нужно использовать только консоль для всего. Я писал что самым лучшим способом создать дамп - это использовать mysqldump, или самый быстрый способ залить дамп - через консоль.

Quote (Dimitro)
И в чем принципиальная преимущество использования консоли перед GUI (про навикат не говорим)?

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

Dimitro, пользуешься своим sqlyog'ом и считаешь, что он царь зверей? Не видишь разницы между дампом в sqlyog'е и mysqldump'ом? Проходи мимо. Не для того писал руководство, чтобы выслушивать подобные заявления. Написано только для принятия к сведению. Тем кому нужно - поймут.
Сообщение # 6 написано 13.11.2012 в 16:03
Dimitro
Praise the sun!
Quote (Прадмур)

Dimitro, пользуешься своим sqlyog'ом и считаешь, что он царь зверей? Не видишь разницы между дампом в sqlyog'е и mysqldump'ом? Проходи мимо. Не для того писал руководство, чтобы выслушивать подобные заявления. Написано только для принятия к сведению. Тем кому нужно - поймут.

У меня складывается мнение, что вы тоже не читаете, что я пишу.
Где хоть слово про SQLyog в моем посту?
В нем четко написано, что юзаю я как консоль, так и проги с GUI, просто их я считаю более быстрым способом для достижения нужных мне целей при одинаковых с консолью результатах.
В ваших же постах напрямую сказано, что делать дампы в прогах с GUI неправильно, почему, вы так и не объяснили.

Quote (Прадмур)
Не видишь разницы между дампом в sqlyog'е и mysqldump'ом?

Да, не вижу, проги с GUI делают дампы через тот же mysqldump с передачей всех параметров, проставленных в окошках в него же.

Quote (Прадмур)
Не видел ни одного GUI, который бы принимал параметры для дампа. Вот каким образом в GUI можно сделать дамп определённых значений в таблице?

http://s47.radikal.ru/i116/1211/2a/b4ff0812a532.jpg
http://s017.radikal.ru/i402/1211/39/da59dc424e82.jpg

Повторюсь, мне это напоминает вечную битву линуксоидов и виндузятников в споре, что же лучше.
Так вот я на стороне тех, кто перед ответом спрашивает "А для какой цели и в каком случае?", а не кричит, что что-то 100% лучше другого, только потому, что сам так считает.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 7 отредактировано Dimitro - Вторник, 13.11.2012, 16:29
Neket007
Core Developer
Dimitro, просто стало интересно, а дамп процедур может sqlyog сделать(не наезд, просто хочется знать)? Я не видел ни разу, но посмотрев что это, понял что очень полезная вещь?

И кстати, такие вот простейшие мануалы по использованию командной строки и управление из консоли очень полезны, если уж на то пошло. Иногда просто нет возможности использования сторонних программ. Про nix системы я вообще молчу, там без этого вообще не обойдешься, а сервера на win не очень распространены(они есть, но на прядок меньше)

Полезный мануал.
Сообщение # 8 написано 13.11.2012 в 16:36
Прадмур
~
Quote (Dimitro)
Где хоть слово про SQLyog в моем посту?
В нем четко написано, что юзаю я как консоль, так и проги с GUI, просто их я считаю более быстрым способом для достижения нужных мне целей при одинаковых с консолью результатах.

Я экстрасенс и знаю что ты подразумеваешь под GUI.
Тем более ты не читаешь то, что пишешь сам. Сам же написал, что не используешь консоль до тех пор, пока есть возможность использовать GUI. А это уже не просто использование, а безвыходное положение.
При одинаковых?) Сравни дамп mysqldump'a и sqlyog'a. Да mysqldump даже на вид круче, не говоря уже о соблюдении всех переменных, например, при использовании нужной кодировки. Чтобы потом не пришлось шаманить или заливать только через тот же sqlyog которым и создавал дамп.

Quote (Dimitro)
http://s47.radikal.ru/i116/1211/2a/b4ff0812a532.jpg
http://s017.radikal.ru/i402/1211/39/da59dc424e82.jpg

Под определёнными значениями я имел ввиду не колонки, а диапазон. Например entry от 200 до 5000 из creature_template.

Раз ты опираешься на мнение других и не используешь навикат только потому, что так сказано на trinitycore.info (хотя сам эту информацию, кроме заливки дамов, не проверял). Наверное и по этой причине ты используешь рекомендованный sqlyog. Так посоветуй trinitycore'овцам использовать эту программу, а то эти бедняги до сих пор почему-то используют mysqldump. Даже если делают дамп на windows.

И хватит заливать на этот недохостинг картинки. Рекламой облеплено каждое свободное место. Только ABP спасает, но всё равно не приятно ) Есть, например, filebeam.com.
Сообщение # 9 написано 13.11.2012 в 16:40
Dimitro
Praise the sun!
Quote
Dimitro, просто стало интересно, а дамп процедур может sqlyog сделать(не наезд, просто хочется знать)? Я не видел ни разу, но посмотрев что это, понял что очень полезная вещь?

На втором скрине из предыдущего поста видно, что может.

Никто не спорит про полезность мануала, спор про то, что ничто не может быть на 100% лучше другого, у обоих методов есть преимущества и недостатки.

Quote (Прадмур)
Раз ты опираешься на мнение других и не используешь навикат только потому, что так сказано на trinitycore.info (хотя сам эту информацию, кроме заливки дамов, не проверял). Наверное и по этой причине ты используешь рекомендованный sqlyog. Так посоветуй trinitycore'овцам использовать эту программу, а то эти бедняги до сих пор почему-то используют mysqldump. Даже если делают дамп на windows.

Я опираюсь только на свое мнение, я использовал навикат минимум несколько месяцев, а SQLyog выбрал сам протестировав не один клиент управления базами данных еще до того, как увидел, что его советуют в офф. документации.

Quote (Прадмур)
При одинаковых?) Сравни дамп mysqldump'a и sqlyog'a. Да mysqldump даже на вид круче, не говоря уже о соблюдении всех переменных, например, при использовании нужной кодировки. Чтобы потом не пришлось шаманить или заливать только через тот же sqlyog которым и создавал дамп.

Сравнил, особой разницы нет.
Проблем с кодировкой тоже.
А то, что есть (минимальная разница), можно банально исправить единожды немного перенастроив опции в GUI.

Quote (Прадмур)
Тем более ты не читаешь то, что пишешь сам. Сам же написал, что не используешь консоль до тех пор, пока есть возможность использовать GUI. А это уже не просто использование, а безвыходное положение.

Я не совсем точно выразился, я не использую консоль до тех пор, пока есть возможность использовать GUI И его использование подразумевает большее удобство для данной конкретной операции, чем выполнение ее в консоли.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 10 отредактировано Dimitro - Вторник, 13.11.2012, 16:59
Прадмур
~
Quote (Dimitro)
На втором скрине из предыдущего поста видно, что может.

Мне не видно )

Quote (Dimitro)
Никто не спорит про полезность мануала, спор про то, что ничто не может быть на 100% лучше другого, у обоих методов есть преимущества и недостатки.

У твоего GUI только наглядность и простота в использовании. Для всего остального есть mysqldump.

Quote (Dimitro)
Проблем с кодировкой тоже.

У меня были. Из за того что sqlyog не сравнивал и не заносил в переменные мою тайм зону и кодировку. Из за этого для русского текста приходилось переводить файл в utf8 или заливать тем же sqlyog'ом. Возможно в новых версиях исправили. Но вместо того, чтобы ждать новых версий и фиксов всяких багов, лучше знать как пользоваться стандартной утилитой.

Quote (Dimitro)
Сравнил, особой разницы нет.

Давно сравнивал, поэтому сейчас и использую mysqldump. Не помню точно что именно мне не понравилось, но всё же что-то очень не хорошее было раз перестал им пользоваться.

Используй что хочешь. Напиши свой мануал по его использованию, возможно он будет полезен начинающим. Мне проще разобраться в использовании стандартных утилит (учитвая что эти знания понадобятся на всех ОС), чем разбираться в устройстве других GUI. И что-то я сильно сомневаюсь что GUI будет поддерживать все возможности стандартных утилит. Тем более через консоль можно одновременно и редактировать дамп, и хоть запаковывать и отправлять куда нужно, что будет намного быстрее, чем через GUI. Так что удобность тут - палка о двух концах.
Сообщение # 11 написано 13.11.2012 в 21:40
Shkrest
Сержант
Ибо да 50 символов легче набрать, но не всегда делаются корректные дампы. Базы больше 4гб нужно тут же пробовать залить обратно. Ну это если вам конечно же нужны 100% рабочие дампы! Была такая проблема. Слили дамп, все подчистили стали переставлять, а дамп запущенный из консоли из 50** символов оказался кривой, и что же вы думаете =-) Все коту под хвост. R.I.P Написали =)
Сообщение # 12 написано 31.08.2013 в 03:07
Desed
Командир
Юзаю навикат и что? Сокращает время в разы.
Крупные дампы свыше 500м делаю через консоль.
До 500 метров навикат.
Еслиб я выполнял те объемы работы через консоль то покрылся бы мхом.
Сообщение # 13 написано 03.09.2013 в 13:22
M1sTerY
Database Developer
Сообщение # 14 написано 07.04.2014 в 02:47
Desed
Командир
Сообщение # 15 отредактировано Desed - Вторник, 08.04.2014, 16:00
Stuffa
Скаут
а зачем все усложнять ?
Сообщение # 16 написано 08.04.2014 в 21:23
  • Страница 1 из 1
  • 1
Поиск: