Существует ли формат двоичного дампа MySql? Или что-нибудь лучше, чем просто текстовые INSERT заявления? - PullRequest
20 голосов
/ 24 сентября 2010

Есть ли что-нибудь лучше (быстрее или меньше), чем страницы с простым текстом CREATE TABLE и INSERT для выгрузки баз данных MySql? Это кажется ужасно неэффективным для больших объемов данных.

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

Есть ли инструмент, о котором я не знаю, или причина этого недостатка?

Ответы [ 4 ]

10 голосов
/ 24 сентября 2010

Не уверен, что это то, что вам нужно, но я обычно перенаправляю вывод mysqldump напрямую в gzip или bzip2 (и т. Д.). Это происходит значительно быстрее, чем вывод в stdout или что-то в этом роде, а выходные файлы благодаря сжатию становятся намного меньше.

mysqldump --all-databases (other options) | gzip > mysql_dump-2010-09-23.sql.gz

Также возможно выполнить дамп в XML с опцией --xml, если вы ищете "переносимость" за счет использования (намного) большего дискового пространства, чем сжатого SQL ...

5 голосов
/ 12 декабря 2011

Извините, нет двоичного дампа для MySQL. Однако двоичные журналы MySQL специально предназначены для резервного копирования и репликации базы данных http://dev.mysql.com/doc/refman/5.5/en/binary-log.html. Их не сложно настроить. Регистрируются только такие изменения, как обновление и удаление, поэтому каждый файл журнала (созданный MySQL автоматически) также является инкрементной резервной копией изменений в БД. Таким образом, вы можете время от времени сохранять целый снимок базы данных (один раз в месяц?), А затем сохранять только файлы журналов, а в случае сбоя восстанавливать последний снимок и запускать журналы.

1 голос
/ 24 сентября 2010

Стоит отметить, что MySQL имеет специальный синтаксис для массовых вставок. С инструкция :

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Вставит 3 строки в одну операцию. Таким образом, загрузка таким способом не так неэффективна, как это могло бы быть в случае с одним оператором на строку, и вместо 129 байтов в 3 инструкциях INSERT это 59 байтов, и это преимущество становится тем больше, чем больше у вас строк.

0 голосов
/ 02 июля 2016

Я никогда не пробовал этого, но не являются ли таблицы mysql просто двоичными файлами на жестком диске?Не могли бы вы просто скопировать сами файлы таблиц?Предположительно, это, по сути, то, о чем вы просите.

Я не знаю, как сшить это вместе, но мне кажется, что копия / var / lib / mysql справилась бы с задачей

...