一个批量上传.支持断点续传的思路.
我这里有一个三十万条记录的库要上传到网上数据库中.
为了防止他超时所以要有断点续传功能.
谁有思路或代码.
提兄弟一把.
呵呵.谢谢各位大侠.
问题点数:60、回复次数:33Top
1 楼pantech_36(~ 25436 ~)回复于 2002-09-11 11:26:24 得分 0
gzTop
2 楼cnnps(诸葛晓光)回复于 2002-09-11 11:51:13 得分 0
有点难度....Top
3 楼drifters(呵呵)回复于 2002-09-11 12:01:04 得分 5
每次用程序插入100条后重新载入页面,如此循环就行了Top
4 楼anziqi(美洲狮)回复于 2002-09-11 12:11:01 得分 0
累死了吧.
不过这个思路可以.可不可以给出一点代码看看.
谢谢Top
5 楼anziqi(美洲狮)回复于 2002-09-11 13:51:06 得分 0
up请高手多多帮忙.Top
6 楼nne998(☆☆☆☆☆☆☆伴月)回复于 2002-09-11 21:19:29 得分 0
为每条记录做个id,,,, 先检查数据库,就知道现在传到哪个咯,,,Top
7 楼anziqi(美洲狮)回复于 2002-09-12 08:29:50 得分 0
具体一点好吗?
象你说的那种我已经编了一个了.不过我感觉不理想.
你能说的详细一点或给个程序吗?这个不是大程序几行代码出来了.
谢谢各位大侠了.Top
8 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 10:27:35 得分 0
先up
你是想用ftp软件将mysql目录上传上去,还是用程序insert上去
Top
9 楼phpteam(phpsalon.com)回复于 2002-09-12 10:37:01 得分 0
我不发表任何意见!昨天开始肚子闹情绪,今天也一样,要去看医生了,拜拜Top
10 楼ipman(.NET)回复于 2002-09-12 11:00:08 得分 5
dump出来,然后ftp上去,然后在服务器上做个脚本import进数据库Top
11 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 11:26:09 得分 10
mysqldump --opt database | mysql --host=remote-host -C database
直接将数据库dump另外一个mysql服务器上
Top
12 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 11:37:20 得分 10
or:
backup:
mysqldump --opt databaseName > backup-file.sql
restore:
mysql databaseName < backup-file.sql
Top
13 楼anziqi(美洲狮)回复于 2002-09-12 11:53:07 得分 0
谢老兄.我有点笨.问清楚一点.
我用的是windows xp兄台说的这个东东我真的没有用过.
你能加上注释吗?
在那里运行.谢谢.我太笨了.
Top
14 楼anziqi(美洲狮)回复于 2002-09-12 11:58:38 得分 0
<?php
/*_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Copyright limuyuan 2000-2008
批量上传
I'm Crazy Programmer anziqi
思路:
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-*/
session_start();
@$linkid = mysql_pconnect("localhost","root") or die (print "无法链接数据库!");
if(!$_SESSION['id'])
{
session_register('id','m');
$_SESSION['id']=0;
}
/*
if(!@mysql_select_db("test1"))
{
mysql_create_db("test1");
}
if(!@mysql_query("select count(*) from dt_product"))
{
$sql="CREATE TABLE dt_product ( tp_id int(11) NOT NULL auto_increment,tp_model varchar(254) default NULL, tp_type varchar(254) default NULL, tp_userid bigint(3) default NULL, tp_maker varchar(254) default NULL, tp_enc varchar(254) default NULL, tp_unit varchar(50) default NULL, tp_price int(11) default NULL, tp_stock int(11) default NULL, tp_notes text, tp_num int(11) default NULL, PRIMARY KEY (tp_id), KEY tp_userid (tp_userid), KEY tp_model (tp_model)) TYPE=MyISAM;";
@mysql_query($sql) or die (print "无法执行SQL语句!");
print "create ok";
}
*/
$resu=mysql_db_query("iwn","select * from dt_product where tp_id>".$_SESSION['id']);
while($aa=mysql_fetch_array($resu))
{
$sql_str="INSERT INTO `dt_product` (`tp_id`, `tp_model`, `tp_type`, `tp_userid`, `tp_maker`, `tp_enc`, `tp_unit`, `tp_price`, `tp_stock`, `tp_notes`, `tp_num`) VALUES ('".$aa['tp_id']."','".$aa['tp_model']."', '".$aa[tp_type]."', '".$aa[tp_userid]."', '".$aa[tp_maker]."',' ".$aa[tp_enc]."',' ".$aa[tp_unit]."',' ".$aa[tp_price]."', '".$aa[tp_stock]."',' ".$aa[tp_notes]."',' ".$aa[tp_num]."')";
mysql_db_query("test1",$sql_str);
print $_SESSION['id']=$aa['tp_id'];
$_SESSION['m']++;
print "已经添加了".$_SESSION['m']."<br>";
}
print "添加完成";
?>
这是我的一个程序就是一条条的添加了,但是有一个问题就是他会超时.
所以我为了防止他超时在select上作了一个session来记录id值.
那种加多少条.跳转一下的方面我也用了.但也会出现超时现象.
而且慢.如果是用这种程序来做的话.大侠们有没能好的办法.
我真的太笨了.Top
15 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 11:59:47 得分 0
进入dos
mysql\bin目录下面有这个mysqldump命令,专门用来备份数据库的命令
可以将数据库倒入到文本。也可以直接copy到另外一个服务器
你直接敲入mysqldump就会出来帮助Top
16 楼anziqi(美洲狮)回复于 2002-09-12 12:03:16 得分 0
可以这样吗:你是想用ftp软件将mysql目录上传上去
是怎么传的.这个东东放上去就可以用了吗?Top
17 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 12:05:41 得分 10
对于你的程序用一句sql语句就可以搞定了
create table dt_product select * from iwn.dt_product
Top
18 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 12:08:58 得分 10
mysql数据库备份方法:
1.拷贝数据库源文件.你到mysql\data目录兄面看看,下面一个目录代表一个数据库。拷贝目录到另外一个服务器就是新建一个数据库了。linux下面注意扩展名大小写问题
2.mysqldump
3.自己写程序Top
19 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 12:10:28 得分 0
对于第一种方法,在linux下面可能不是data目录,而是mysql目录,自己找找就知道了
对于第三种,wasy以前写过一个备份程序。Top
20 楼anziqi(美洲狮)回复于 2002-09-12 13:48:55 得分 0
谢鸟儿我自己看看.Top
21 楼wcy001(天天向上)回复于 2002-09-12 16:46:20 得分 0
设置不超时可以用set_time_limit(0)就可以了,不过你不需要那么做就可以达到目的,就使用mysqldump就可以
Top
22 楼anziqi(美洲狮)回复于 2002-09-12 17:00:50 得分 0
create table dt_product select * from iwn.dt_product
适用于本地和服务器两个库吗?Top
23 楼anziqi(美洲狮)回复于 2002-09-12 17:03:17 得分 0
CGI Timeout
The specified CGI application exceeded the allowed time for processing. The server has deleted the process.
是超时吧.我用了set_time_limit(0);
怎么还是这样.Top
24 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 17:17:59 得分 0
可能不适合,不敢确定,没有试过。
try:
otherServerName.iwn.dt_product
不过用户名和密码肯定要能够连上那个server的
我是根据你的程序来写的。你程序里面只是同一个数据库
你还是用mysqldump或者直接拷贝较好Top
25 楼anziqi(美洲狮)回复于 2002-09-12 18:16:08 得分 0
为什么我改php.ini还是用那个都是超时.
是不是他往网上服务器上插入数据他是按服务器的配置来.超时设置是五分钟.
我的超时设置为什么不好使呀.Top
26 楼anziqi(美洲狮)回复于 2002-09-12 18:20:22 得分 0
mysqldump原理是什么.
生成文件后把他放在别一个库中就可以使用.
还是怎么的.我在phpadmin中导过一次因为太大好象也有超时所以失败.
如果是copy文件.我没有ftp的密码.Top
27 楼phpteam(phpsalon.com)回复于 2002-09-12 18:25:09 得分 10
MYSQLDUMP是将数据库生成SQL语句的形式存放的,导入的时候就等于执行这些SQL语句。
你上面这个错误应该不是超时错误。Top
28 楼anziqi(美洲狮)回复于 2002-09-12 18:42:22 得分 0
这种方面我应该用了.还是不行.
导到一半的时候跳出来了.跟没有导一样.
所以放弃.Top
29 楼phpteam(phpsalon.com)回复于 2002-09-12 18:45:28 得分 0
用PHPMYADMIN导出不行吗???Top
30 楼anziqi(美洲狮)回复于 2002-09-12 19:29:31 得分 0
用了.行是行.
在导入的时候那个大的数据库导入一会就会跳出.
并提示出错.
Top
31 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 19:35:56 得分 0
另外一台服务器是linux吗
你到底有没有那台服务器的权限???
如果你有ftp用户名和密码,以及mysql数据库目录的写权限,你才可以用ftp的方法将文件上传上去
否则你只有用程序来实现。当然phpmyadmin也是程序。
你如果用phpmyadmin导出,可以将倒出的语句一部分一部分的执行。
你也可以用你上面提供的程序,每次循环的时候先检查程序已经化了多长时间
,如果快到超时时间,记下当前的循环次数$n,并存为session,然后重新转向该页再执行一次,不过这时候要用mysql_data_seek直接转到记录集的第$n行,然后再循环,$n递加,如此循环就会下去就可以搞定Top
32 楼vivanboy(早起的鸟儿有虫吃)回复于 2002-09-12 19:36:56 得分 0
提示错误,可能是因为里面有#,这是phpmyadmin的bug
你可以自己写程序Top
33 楼anziqi(美洲狮)回复于 2002-09-13 08:20:13 得分 0
谢谢你.
我今天来了好象没有加分.
这些我有用的.好的我试试.
星期六星期天.我好好找找再整理.
昨天老总给我叫回去了没有办法.再整理.Top




