PHP程序。远程端数据库。通过外网IP进行远程连接。而PHP程序是在linux环境下面直接在后台运行的
[admin@XXX XXX]$ php 我要执行的程序.php 24小时不间断,循环处理。连上了,做一些insert的操作。可是问题就出来了,隔几天就会出现Lost connection to MySQL server的错误信息应该是与远程数据的连接中断了。然后经常会程序卡住,没有任何响应了,和死机没什么差别,需要重新启动整个PHP的进程。白天还行,晚上要是出这个问题就太困绕了,已经出了好几次了。我觉得是数据库那边网络有问题,不过人家说没问题我也没办法t_t。有什么好的办法能解决么,只要求不死机能正常跑下去……程序大致格式如下while(1){死循环
连接本地数据库
连接远程数据库 从本地数据库表中取得数据
写入远程数据库表中
删除本地数据库表中已取得的数据 sleep(30) //过30秒再做}
[admin@XXX XXX]$ php 我要执行的程序.php 24小时不间断,循环处理。连上了,做一些insert的操作。可是问题就出来了,隔几天就会出现Lost connection to MySQL server的错误信息应该是与远程数据的连接中断了。然后经常会程序卡住,没有任何响应了,和死机没什么差别,需要重新启动整个PHP的进程。白天还行,晚上要是出这个问题就太困绕了,已经出了好几次了。我觉得是数据库那边网络有问题,不过人家说没问题我也没办法t_t。有什么好的办法能解决么,只要求不死机能正常跑下去……程序大致格式如下while(1){死循环
连接本地数据库
连接远程数据库 从本地数据库表中取得数据
写入远程数据库表中
删除本地数据库表中已取得的数据 sleep(30) //过30秒再做}
每次执行SQL前都会运行这段函数。function test_db($IPADDR,$link){
$ok = @mysql_ping($link);
if(empty($ok)){
while(1){
$link = dblink($IPADDR);//连接数据库的函数
$nowok = mysql_ping($link);
print "restart mysql connect ".$nowok." \n";
if($nowok == true)return $link;
sleep(20);// 暂停30秒,继续执行
}
}else{
return $link;
}
}
用系统的cron来做不是更好吗?死机的问题有可能是因为你的程序没有及时释放链接,结果集,导致达到mysql的最大链接数,以及消耗大量内存引起的.
2.插入n条(如100)数据后就commit一次
数据库的一个处理单位不可能一次性更新太多数据,你也得让它有释放内存的喘息机会不是。
cron 1分钟一次,难道你的程序1分钟都执行不完.
程序执行的时候可以在tmp生成一个lock文件,
如果lock文件存在的时候,
程序不进行insert处理,并推出。等到下一次cron执行程序的时候再重新insert。可以在cron设定每10分钟或者一小时执行一次。具体时间间隔可以根据情况而定。
我之前做从 sqlserver 数据岛到 oracle
几十W条 都可以岛的好好的。
实现方法是:
根据传最后执行一个ID,用js进行 get 传值方式 进行 读取插入的。比如:
<script type="text/javascript">
function ff() {
document.location='?id=<?php echo $lastid;?>&salestatus=<?php echo $_GET['salestatus'] ?>&status=<?php echo $_GET['status'] ?>';
}
setTimeout("ff()",100);
</script>
连接本地数据库
连接远程数据库 从本地数据库表中取得数据
写入远程数据库表中
删除本地数据库表中已取得的数据
关闭数据库连接,试试
sleep(30) //过30秒再做 }或者 连接本地数据库
连接远程数据库
while(1){死循环
if(!db_r)
{
连接远程数据库
}
elseif(!$db_l)
{
连接本地数据库
}else{
从本地数据库表中取得数据
写入远程数据库表中
删除本地数据库表中已取得的数据
关闭数据库连接,试试
}
sleep(30) //过30秒再做 }