XAMPP 并导入 .sql

XAMPP and importing .sql

我有一个 sql 文件,其中包含 1.74+ 百万条记录,这不是您的平均数据库导入。

如果需要,我将上传的最小值从 8MB 限制提高到 128MB,并将内存限制提高到 1GB。在一台有 1GB RAM 的机器上出现内存不足错误之前,只有 251 条记录得到处理,这根本没有意义。尽管声称要导入记录,但像我本地主机这样的网络主机却停滞不前。未压缩文件为 230MB,压缩后为 36MB。

我尝试为我的本地服务器编写例程,但我发现我无法访问或插入数据,我收到访问被拒绝错误 (42000/1044),当我查找它时,它是关于访问的并且需要 root 权限...

有关如何正确拆分文件或通过脚本导入的任何建议,因为我不敢说 PHPMyAdmin 丢失了情节。它没有太大帮助,而且大部分文档都假设您可以物理访问系统,所以我在文档中找不到任何有用的东西,我一直在兜圈子......帮助!

我最近在 SO (here) 中找到了关于这个的答案。 我将尝试再次搜索它以提供其 URL。 这是我用来完成相同任务的代码。

ini_set('max_execution_time', 0);
set_time_limit(0);
ini_set('upload_max_filesize', '1000M');


// Temporary variable, used to store current query
$templine = '';
$filename = 'filename.sql';
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line) {
    // Skip it if it's a comment
    if (substr($line, 0, 2) == '--' || $line == '') {
        continue;
    }

    // Add this line to the current segment
    $templine .= $line;
    // If it has a semicolon at the end, it's the end of the query
    if (substr(trim($line), -1, 1) == ';') {
        // Perform the query
        mysqli_query($connection, $templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysqli_error($connection) . '<br /><br />');
        // Reset temp variable to empty
        $templine = '';
    }
}
echo "Tables imported successfully";

使用基于浏览器的浏览器 UI 处理大型记录并不是一个好主意。

1) 如果它是 SQL 文件尝试使用 mysql 命令行

mysql -uuser -ppassword db_name < file.sql

2) 如果是 CSV 文件使用 mysqlimport,table 名称应与文件名匹配(不带扩展名),您可以定义分隔符以及是否忽略第一行(如果第一行是 headers).

3) 或者尝试 HeidiSQL,但我发现 command-line 效果最好,即使在 Windows.

上也是如此

4) 如果你的选择只是安装的phpmyadmin,而你不能上传任何脚本如Adminer到远程服务器,那么你剩下有限的选择之一就是拆分SQL file/queries 并处理它们。下面给出拆分正确和错误的例子:

bigfile.sql

Insert into tablex values ('A','AA'),
('B','BB'),('C','CC'),('D','DD');

拆分为

file1.sql

Insert into tablex values ('A','AA'), ('B','BB');

files2.sql

Insert into tablex values ('C','CC'), ('D','DD');

你不应该像下面那样拆分它......它会失败......

file1.sql

Insert into tablex values ('A','AA'),

files2.sql

('B','BB'), ('C','CC'), ('D','DD');