menu: TOP | Text・File | Graphic | Network | Shell・Others | Game
2個のqfsのデータベースを移動する方法


・データベース名qfsとqfs2に同じqfsのテーブルがある場合
1.DBI、DBD-MySqlをCPANからダウンロード
2.それぞれをperl makefile.pl、make、make test、make installでインストール
3.以下のPerlスクリプトを保存して実行。赤字は任意に設定
#!/usr/bin/perl
# 移動

#移動対象の条件(d_idやregdate)
$d_ids="
d_id=17 /* News */
or d_id=15 /* Mail */
or d_id=13 /* Personal */
or d_id=8 /* Work */
or d_id=9 /* Spam */
";

&OpenDB;

### 1.添付をqfs2にコピー 
print "Back up to qfs2-attachment\n";
&sql("insert into qfs2.attachment
 select qfs.attachment.a_id,qfs.attachment.m_id,qfs.attachment.filename,qfs.attachment.encode,
  qfs.attachment.body,qfs.attachment.regdate
 from qfs.attachment,qfs.mail
 where qfs.attachment.m_id=qfs.mail.m_id
 and ($d_ids)");
&commit;

### 2.メールをqfs2にコピー
print "Back up to qfs2-mail\n";
&sql("insert into qfs2.mail
 select * from qfs.mail
 where $d_ids");
&commit;

### 3.メールをゴミ箱へ
print "delete qfs-mail\n";
&sql("update qfs.mail set d_id=4 where $d_ids");
&commit;

### 4.ゴミ箱を空に
print "delete qfs-trashcan\n";
&sql("delete from qfs.mail where d_id=4");
&commit;

&commit;

&CloseDB;

exit;

######################################## DB関係
#--------------------------------
# OpenDB  データベースを開く
sub OpenDB{
 $db=DBI->connect("DBI:mysql:qfs:localhost","ユーザー名","パスワード") || die "CONNECT ERROR $DBI::ERRSTR";
}
#--------------------------------
# CloseDB  データベースを閉じる

sub CloseDB{
 $db->disconnect;
}
######################################## SQL関係
sub sql{my $rc;
 if($debug==0||$_[0]!~/update/){$st=$db->prepare($_[0]);
  $rc=$st->execute;}else{$rc=1;}
 return($rc);
}

sub fetch{if($re=$st->fetchrow_arrayref){return(1);} return(0);}
sub fetch2{if($re=$st->fetchrow_hashref){return(1);} return(0);}
sub commit{$st->finish;}
sub rollback{$st->finish;}


戻る