Импортируйте большой файл на MySQL DB

Я хочу вставить приблизительно 50 000 запросов mysql для 'вставки' в mysql дб, для этого у меня есть 2 опции,

1-Непосредственно импортируют (.sql) файл: Следующая ошибка, происходят, "Вы, вероятно, пытались загрузить слишком большой файл. См. документацию для путей к обходному решению этот предел".

2-Использования php кодирует для вставки этих запросов в форму различных блоков из (.sql) файла. вот мой код:

<?php

// Configure DB
include "config.php";

// Get file data
$file = file('country.txt'); 

// Set pointers & position variables
$position = 0;
$eof = 0; 

while ($eof < sizeof($file))
{
    for ($i = $position; $i < ($position + 2); $i++)
    {
        if ($i < sizeof($file))
        {
            $flag = mysql_query($file[$i]);

            if (isset($flag))
            {
                echo "Insert Successfully<br />";
                $position++;
            }

            else
            {
                echo mysql_error() . "<br>\n";
            }
        }

        else
        {
            echo "<br />End of File";
            break;
        }
    }

    $eof++;
}

?>

Но ошибка емкости памяти, происходят однако, я имею, расширяют предел памяти от 128M до 256M или даже 512M.

Затем я думаю, что, если я мог бы смочь загрузить ограниченные строки из (.sql) файла как 1 000 за один раз и выполнить запрос mysql затем, это может быть импорт все записи от файла до дб. Но здесь у меня нет идеи для того, как обработать файл, запускают местоположение для окончания и как я могу обновить запуск и закончить местоположение, так, чтобы это не выбирало ранее выбранные строки из .sql файла.

8
задан Alix Axel 6 January 2010 в 06:39
поделиться

4 ответа

[

] Вот нужный вам код, [] теперь уже претенциозный []! =D[

] [
<?php

include('config.php');

$file = @fopen('country.txt', 'r');

if ($file)
{
    while (!feof($file))
    {
        $line = trim(fgets($file));
        $flag = mysql_query($line);

        if (isset($flag))
        {
            echo 'Insert Successfully<br />';
        }

        else
        {
            echo mysql_error() . '<br/>';
        }

        flush();
    }

    fclose($file);
}

echo '<br />End of File';

?>
] [

]В основном это менее жадный вариант Вашего кода, вместо того, чтобы открывать весь файл в памяти, он читает и выполняет небольшие куски (один лайнер) SQL-операций.[

].
4
ответ дан 5 December 2019 в 21:19
поделиться
[

] Вместо того, чтобы загружать весь файл в память, что и делается при использовании функции [] file[], возможным решением было бы чтение его построчно, используя комбинацию из [][]fopen[][], [][]fgets[][] и [][]fclose[][] - идея состояла в том, чтобы читать только то, что вам нужно, иметь дело со строками, которые у вас есть, и только потом читать следующие пару строк. [

] [

][
] Addditionnaly, вы, возможно, захотите взглянуть на этот ответ: [] Лучшая практика: Импорт mySQL файла в PHP; разделенные запросы[][

] [

]Пока нет принятого ответа, но некоторые из данных ответов могут уже помочь вам...[

].
2
ответ дан 5 December 2019 в 21:19
поделиться
[

] Используйте клиент командной строки, он гораздо эффективнее и должен легко обрабатывать 50K вставки:[

] [
 mysql -uUser -p <db_name> < dump.sql
]
1
ответ дан 5 December 2019 в 21:19
поделиться
[

] Недавно я читал о вставке большого количества запросов в БД для быстрой работы. В статье было предложено использовать функцию []sleep()[] (или []usleep[]) для задержки на несколько секунд между запросами, чтобы не перегружать MySQL сервер.[

].
0
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: