1 (изменено: Welemir, 2008-11-30 14:26:34)

Тема: #1062 - Duplicate entry

При импорте бд на 44-ой таблице проищошла остановка:

Ошибка

SQL-запрос:

INSERT INTO `b_forum_letter`
VALUES ( 34, 2, 'о', 'ОоOo' ) ;

Ответ MySQL: Документация
#1062 - Duplicate entry '2-??' for key 2

Что делать?

БД весит 60 МБ+

Также интересует,как работать с функцией Частичный Импорт,а если точнее,то что означает 'Количество запросов, пропущенных от начала'.При указании никаких изменений...

Юзаю VertrigoServ,где PHP Server - версии 5.2.5 и MySql 5.0.45

2

Re: #1062 - Duplicate entry

Welemir
Вероятно данные в таблице должны быть уникальными. Без структуры таблицы сказать сложно.
Смущает также это '2-??'. Если на месте вопросиков должна быть кириллица, значит путаница в кодировках.
Попробуйте открыть дамп в текстовом редакторе и посмотреть в какой он кодировке и как выглядит кириллица. Возможно, перед открытием такой большой дамп надо будет разбить.

По частичному импорту.
При импорте больших дампов скрипт приостанавливает свое выполнение, когда приближается временной (или другой) лимит и вписывает в данное поле количество выполненных запросов. Для продолжения импорта требуется снова нажать кнопку "ОК" и импорт продолжится.

3

Re: #1062 - Duplicate entry

60 мб большой для того,чтобы открывать на моём компе =________=.При  продолжении импорта выдаёт новую ошибку:

SQL-запрос:

INSERT INTO `b_blog_smile`
VALUES ( 74, 'S', ':oops:', 'icon_redface.gif', 'FICON_REDFACE', 'Y', 150, 16, 16 ) ;

Ответ MySQL: Документация
#1062 - Duplicate entry '74' for key 1

Хотя я пропустил 50 запросов,а ошибка вылетела на 10-ой таблице,т.е. он заливает по-новой,хотя я поставил частичный импорт.

Сообщение добавлено Mon Dec  1 13:21:39 2008
74 это ID элемента в таблице.Скорее всего,он выдаёт ошибку из-за этого,что ID - первичный ключ.Но я же не прошу его по-новой всё заливать...

Сообщение добавлено Mon Dec  1 13:23:42 2008
Да и вообще,как посчитать количество запросов,прошедших от начала?))Бред =_=

4

Re: #1062 - Duplicate entry

Ммм...ну хоть количество запросов пропускает,но остаётся проблема в их количестве)

5

Re: #1062 - Duplicate entry

Welemir
Поле частичного импорта для автоматического разбиения скриптом, он сам определяет количество вставленных запросов и вписывает значение в поле.

В вашей ситуации следует разбить большой файл дампа на более мелкие части и импортировать отдельно, попробовав найти причину ошибок.

6 (изменено: Welemir, 2008-12-01 19:56:52)

Re: #1062 - Duplicate entry

Hanut сказал:

Welemir

В вашей ситуации следует разбить большой файл дампа на более мелкие части и импортировать отдельно, попробовав найти причину ошибок.

Ээмм.... Извиняюсь,конечно,за глупость,но чем разбивать?))

7

Re: #1062 - Duplicate entry

Введите в переменную $file_name_in имя файла и запустите скрипт. На выходе будут пронумерованные файлы вида done_1.sql размером в 1МБайт. Однако перед импортом каждый файл придется вручную отредактировать склеив разорванные запросы из конца и начала файлов.

<?php

function FileWrite($file_contents, $i) {
    $file_name_out = "done_{$i}.sql";
    if ($handle = fopen($file_name_out, 'w')) {
        fwrite($handle, $file_contents);
        fclose($handle);
    }
}

$file_name_in = 'big.sql';
$max_file_size = 1000 * 1024;
$i = 1;
if ($handle = fopen($file_name_in, 'r')) {
    $file_contents = '';
    $bytes_read = 0;
    while (!feof($handle)) {
        $bytes_read += 1024;
        if ($bytes_read > $max_file_size) {
            FileWrite($file_contents, $i++);
            $file_contents = '';
            $bytes_read = 1024;
        }
        $file_contents .= fread($handle, 1024);
    }
    fclose($handle);
    if (!empty($file_contents)) FileWrite($file_contents, $i++);
}

?>

8

Re: #1062 - Duplicate entry

Эм...вручную врядли получится,но спасибо))),ибо читает файл 0.97 мб минуты две...