Перенос баз MySQL на другой компьютер

MySQL, PostgreSQL, MSSQL, Oracle и т.д. Диалекты SQL, формирование запросов, хранимые процедуры, тригерры, транзакции и многое другое

Перенос баз MySQL на другой компьютер

Сообщение xdsl 09 мар 2011, 09:03

Общеизвестно, что существует единственный надежный способ переноса любых SQL-баз с одной системы на другую, а именно - перенос в виде набора sql-команд в текстовом файле(ах). Однако, ради ускорения работы, базы между одинаковыми серверами и платформами часто переносят в виде обычных файлов. Конкретно, для MySQL, это 3 файла на таблицу с расширениями frm, myd и myi. Так считают многие, забывая, что таблицу в этих трех файлах mysql держит только в случае, если формат таблицы - MYISAM...

Уже пару раз господа студенты приносили мне "на посмотреть" базы mysql, которые ни на своем, ни на стороннем компьютере развернуть не получалось. Отсылая их обратно с напутствием приносить все в виде SQL-команд, и стандартным пожеланием продолжать маяться мазохизмом в этом клятом виндовсе, тем не менее, заинтересовался в причинах проблемы. Посмотрев на принесенные файлы, обнаружил там только файлы с расширением frm, которые содержат структуру таблиц. Файлы с данными (myd) и с индексами (myi) - отсутствовали. Все это вызвало как минимум недоумение, ведь не будет-же студент сидеть и перебирать файлы - это понесу, а это - нет, он наверняка просто скопирует каталог базы со всем содержимым на флешку. Разбираясь, полистал один из frm-файлов и обнаружил в нем магическое слово InnoDB, после чего все стало на свои места.

Оказывается, создавая свои таблицы, студиозы (по непонятным мне причинам, возможно - по умолчанию в их версии mysql) выбирают тип движка - InnoDB. Никаких профитов на своих мелких проектах они от этого не получают (ну покажите мне студиоза, который активно транзакции использует на своих двух-трех таблицах!), а вот при переносе баз получают лишние проблемы, т.к. ВСЕ ТАБЛИЦЫ INNODB ПО УМОЛЧАНИЮ ХРАНЯТСЯ В ОДНОМ БОЛЬШОМ ФАЙЛЕ! А файл этот (сюрпрайз!) лежит вне каталогов их баз данных.

Резюме для студентов:
1) Не гоняйтесь за скоростью
2) Учите матчасть: http://ru.wikipedia.org/wiki/InnoDB, http://ru.wikipedia.org/wiki/MyISAM
xdsl
 
Сообщения: 1233
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Перенос баз MySQL на другой компьютер

Сообщение alekam 11 мар 2011, 10:29

думаете данные студенты знают, что в mysql есть разные движки для работы с таблицами?
все на много проще. с некоторого времени InnoDB дефолтный движок для таблиц в MySQL. В настоящее время для использования MyISAM кроме личных предпочтений нет никаких объективных причин. Полнотекстовый поиск в расчет не берем, т.к. механизм поиска, реализованный с помощью инструментов типа Sphinx выглядят более интересно.

единственно верный способ для переноса БД в данном случае - это полный SQL дамп базы. перенос БД по средством копирования бинарных файлов таблиц является грязным хаком.
alekam
 
Сообщения: 46
Зарегистрирован: 23 дек 2008, 14:36
Полное имя: A.K.

Re: Перенос баз MySQL на другой компьютер

Сообщение xdsl 11 мар 2011, 10:50

alekam писал(а):единственно верный способ для переноса БД в данном случае - это полный SQL дамп базы. перенос БД по средством копирования бинарных файлов таблиц является грязным хаком.

На все 100% согласен. Однако даже сам ношу базы с работы домой и обратно бинарными файлами ;) В моем частном случае это на порядок быстрее.
xdsl
 
Сообщения: 1233
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Перенос баз MySQL на другой компьютер

Сообщение БорАл 11 мар 2011, 13:33

Почему перенос бинарных файлов базы данных является хаком?
Ubuntu Linux 10.04 LTS Netbook Edition; Ubuntu Linux 11.04 Desktop
БорАл
 
Сообщения: 58
Зарегистрирован: 11 ноя 2009, 14:37
Откуда: Из небытия
Полное имя: Алексей aka x_Fafnir_x

Re: Перенос баз MySQL на другой компьютер

Сообщение xdsl 11 мар 2011, 15:05

Потому-что википедия говорит, что хак - это "модификация кода программы, позволяющая уменьшить размер программы, расширить функциональность или ускорить её работу, наконец просто красивое программистское решение". Ну а "грязный хак" - это то-же самое, но только для крайне узкочастного случая, что не позволяет распространить решение на всю задачу и даже на отдельные ее части.
xdsl
 
Сообщения: 1233
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Перенос баз MySQL на другой компьютер

Сообщение alekam 24 мар 2011, 10:48

Если по каким-то причинам не устраивает SQL-дамп, то другой вариант - репликация. Хотя в контексте данной темы это конечно не вариант )
alekam
 
Сообщения: 46
Зарегистрирован: 23 дек 2008, 14:36
Полное имя: A.K.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron