当 MYSQL 中输入大约 400 万条记录时,浏览器崩溃
-
19-09-2019 - |
题
我下载了一个导出为 TXT 格式的数据库,大小约为 700MB,包含 700 万条记录(每行 1 条)。我编写了一个脚本将数据导入到mysql数据库中,但是当插入大约400万条记录时,浏览器崩溃了。我已经在 Firefox 和 IE 中进行了测试。有人可以给我对此的意见和建议吗?
脚本是这样的:
<?php
set_time_limit(0);
ini_set('memory_limit','128M');
$conexao = mysql_connect("localhost","root","") or die (mysql_error());
$base = mysql_select_db("lista102",$conexao) or die (mysql_error());
$ponteiro = fopen("TELEFONES_1.txt","r");
$conta = 0;
function myflush(){ ob_flush(); flush(); }
while(!feof($ponteiro)){
$conta++;
$linha = fgets($ponteiro,4096);
$linha = str_replace("\"", "", $linha);
$arr = explode(";",$linha);
$sql = "insert into usuarios (CPF_CNPJ,NOME,LOG,END,NUM,COMPL,BAIR,MUN,CEP,DDD,TELEF) values ('".$arr[0]."','".$arr[1]."','".$arr[2]."','".$arr[3]."','".$arr[4]."','".$arr[5]."','".$arr[6]."','".$arr[7]."','".$arr[8]."','".$arr[9]."','".trim($arr[10])."')";
$rs = mysql_query($sql);
if(!$rs){ echo $conta ." error";}
if(($conta%5000)==4999) { sleep(10); echo "<br>Pause: ".$conta; }
myflush();
}
echo "<BR>Eof, import complete";
fclose($ponteiro);
mysql_close($conexao);
?>
解决方案
尝试分割文件在100点MB的块。这是一个快速的解决建议,把工作做好。该浏览器的问题可以得到复杂的解决。也尝试不同的浏览器。
phpMyAdmin的有一些选项可以继续查询,如果事故发生。允许中断进口的情况下,脚本检测是接近时限。这可能是导入大文件时很好的方式,但它可以打破交易。
其他提示
我不知道为什么你需要一个Web浏览器将记录插入到MySQL。为什么不使用数据库本身的进口设备和离开网络的出来吗?
如果这是不可能的,我不知道是否分块的镶入的1000组同时将帮助。而不是提交整个数据库作为单个事务,我建议打破它。
您使用的是InnoDB?
,没有尝试
,点击暂停:NNNN
输出到浏览器,并且看是否有帮助。这可能是简单的浏览器正在长网页它要求呈现的窒息。
而且,PHP是定时出长传输期间?
有没有帮助,也,你有睡眠(10)增加所花费的时间。
您可以尝试分手了不同的TXT文件的文件,并使用文件重做过程。我知道我至少使用这种方法一次。
浏览器被阻塞,因为请求的时间太长来完成。是否有一个原因,这个过程应该是一个网页的一部分?如果你绝对要做到这样,考虑管理的块拆分您的数据。
运行代码。这样一来,你永远不会遇到超时长时间运行的过程。虽然,这种情况是你的浏览器崩溃之前超时^^。 如果您尝试在托管你没有shell访问的服务器来执行,用crontab中运行代码。但是,你必须确保crontab中的只运行一次!