我有一个包含1.74+ Million记录的sql文件,这不是您的平均数据库导入。
如果需要,我将上传最小值从8MB限制提升到128MB,将内存限制提升到1GB。在我可以使用1GB RAM的机器上出现内存不足错误之前,只有251条记录得到了处理,这根本就没有意义。尽管声称要导入记录,但网络主机就像我的本地主机一样。未压缩文件为230MB,压缩为36MB。
我试图为我的本地服务器编写一个例程,我发现我无法访问或插入数据,我收到一个拒绝访问错误(42000/1044),当我查找它时,它关于访问和需要root privis ...
有关如何正确拆分文件或通过脚本导入文件的任何建议,因为PHPMyAdmin我不敢说,丢失了情节。它没有多大帮助,大部分文档都假设你有物理访问系统的权限,所以我找不到任何有用的文档,我继续在圈子里走动...帮助!
答案 0 :(得分:2)
对于大型记录使用基于浏览器的UI并不是一个好主意。
1)如果是SQL文件,请尝试使用mysql命令行
mysql -uuser -ppassword db_name < file.sql
2)如果它是CSV文件使用mysqlimport,表名应该与文件名匹配(没有扩展名),你可以定义分隔符以及是否忽略第1行(如果第一行是标题)。
3)或试用HeidiSQL,但我发现命令行效果最好,即使在Windows上也是如此。
4)如果你选择的只是安装的phpmyadmin并且你无法将任何脚本(如Adminer)上传到远程服务器,那么剩下的一个有限选择是拆分SQL文件/查询并处理它们。下面给出了正确和错误拆分的一个例子:
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');
答案 1 :(得分:0)
我最近在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";