mysql数据复制方案

现在找一个提供免费MYSQL的网站真不容易,即便找到了也不提供file权限,管理数据怎么办?用phpMyAdmin在线一条一条的插入?如果想搬家呢?
所以本人在一开始便设计了一套数据管理方案:
在本地将数据保存成TXT文件,FTP上传,PHP程序将其逐行读出,写入MYSQL。导出时反之。

日前偶上OSO论谈,看到有网友正苦于此事,现将源代码公布,供大家分享。如有漏洞,望指正。
由于时间关系本人并没有设计出一个通用的程序,只是举例说明。

mysql 表名:tbn
字段:
ssj: date
ssm: varchar(8)
bos: enum("s","b","f") default s
这里只设计了三个字段,各有其特点,其它类型的字段可参照设计。


tbn.txt文件:
ssj       ssm         bos
------------------------------------
2001-04-05    record1         2
2001-04-06       record2         1
2001-04-08       record3         3
------------------------------------
为了导入导出TXT的一致性,将mysql的ENUM字段转存TXT文件时以索引号代替,这样便于修改、更新记录
1对应enum字段的s
2对应enum字段的b
3对应enum字段的f
字段间为TAB符


txt2db.php
<?
require "connecthost.inc.php";//连接到MYSQL服务器,可别照抄
$tbn=$tbn;//mysql表名
$rf=file("$tbn.txt");//file是一个将TXT文件按行直接读入数组的函数
$rfs=count($rf);
for (
$k=0;$k<$rfs;$k++) {
      
$exstr=explode(chr(9),$rf[$k]);//EXPLODE是一个字符串分割函数,CHR(9)为TAB符
      
$ins=mysql_query("insert into $tbn (ssj,ssm,bos)  values('$field[0]','$field[1]',$field[2])");
      
$inss=$inss+$ins;
}
echo 
$inss."个记录被插入<BR>";
mysql_close();
?>


db2txt.php
<?
require "connecthost.inc.php";
$tbn=$tbn;
//下面先得到ENUM字段的所有值及对应索引号,
//如果不明白,在DOS下运行一下show columns from $tbn like 'bos',分析一下返回的结果
$fea=mysql_query("show columns from $tbn like 'bos'");
$fea_s=mysql_fetch_array($fea);
$fea_s2=$fea_s['Type'];
$bosset=explode(",",substr($fea_s2,5,(strlen($fea_s)-6)));
$bossets=count($bosset);
for (
$j=0;$j<$bossets;$j++){
$bosset[$j]=substr($bosset[$j],1,strlen($bosset[$j])-2);
}
$qh=mysql_query("select * from $tbn");
$fp=fopen("$tbn.txt","w"); //打开一个用于写入的文件
while ($row=mysql_fetch_array($qh)) {
      for (
$i=0;$i<$bossets;$i++){
            if (
$row[2]==$bosset[$i]){
            
$bosdm=$i+1;    //+1 because mysql enum index from 1,php array index from 0
            
break;
            }
//找到当前ENUM字段对索引号
      
}
         
$record=$row[0].chr(9).$row[1].chr(9).$bosdm.chr(13).chr(10);
     
//chr(9)为TAB符,chr(13).chr(10)为回车并换行
         
$sl=strlen($record);
         
$fps=fputs($fp,$record,$sl);//写入文件
}
echo 
"$tbn trans over  ".$fps;
fclose($fp);
mysql_close();
?>

当然,要先用FTP工具把TXT文件的属性改为可写,才能写入,想必这不用我说。