Ряды между двумя записями индекса? - PullRequest
3 голосов
/ 17 января 2010

У меня проблемы с повторным импортом дампа базы данных, созданного mysqldump.Я запустил mysqldump с опцией order-by-primary и запустил ее на таблице с уникальным ключом (без явного первичного ключа, поэтому он был отсортирован по этому уникальному ключу).В этом случае моей целью было воссоздать таблицу, превратив уникальный ключ в первичный ключ.

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

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

tl; dr : если я только что вырезал мусор, я не знаю, сколько ключей будет не хватать между предыдущим и последующим - дамп сортируется по этому уникальному ключутак что это облегчает жизнь в этом отношении.Есть ли в mysql способ извлечь все строки между двумя записями в индексе?

Ключ представляет собой шестнадцатеричную строку из 32 символов, которая хранится в столбце типа CHAR (32).Я почти уверен, что не могу использовать операторы <или> в строках ... так что есть предложения?

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Сортировка mysqldump по первичному ключу (или уникальному ключу) - вот что заставило его так долго ждать. Десять дней - это невероятно.

Выполнение подобной сортировки полезно, только если вы хотите сделать резервную копию таблицы MyISAM и восстановить ее в таблицу InnoDB. Это то, что вы делаете?

В MySQL, безусловно, есть способ вывести подмножества таблицы. Проверьте --where опция mysqldump. Это должно позволить вам создавать резервные копии поврежденных строк.

И да, вы можете использовать < и > для строк в SQL. Вы также можете использовать предикат BETWEEN.

1 голос
/ 17 января 2010

Мой первый вопрос: как спам-почта может попасть в вашу базу данных и уничтожить ее?

Полагаю, это исходит из одного из ваших столбцов данных, верно? Можете ли вы показать, как этот E-Mail и как ему удалось нарушить структуру вашего дампа?

Может быть, это была какая-то инъекция заголовка, из-за которой дамп вставлял разрывы строк там, где их не должно быть, я не знаю. В любом случае, на мой взгляд, выяснение этого было бы первым приоритетом.

...