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;}
戻る
|