私は移行スクリプトを用意しています。DBD :: mysql :: stの実行に失敗したperl dbiスクリプトの移行が失敗しました:MySQLサーバーが廃止されました
my $ dbh1 = DBI-> connect($ dsn1、$ userid、$ password、{mysql_enable_utf8 => 1})またはdie $ DBI :: errstr;
my $ dbh2 = DBI-> connect($ dsn2、$ userid、$ password、{mysql_enable_utf8 => 1})またはdie $ DBI :: errstr;
ここで、dbh1からdbh2にデータを移行します。スクリプトを実行している間DBD :: mysql :: stの実行に失敗しました:MySQLサーバーが廃止されました
接続が失敗した場合は、再接続してスクリプトを続行します。どうすればそれを処理できますか?
$select = $dbh1->prepare("SELECT * FROM ADAP"); $insert = $dbh2->prepare("INSERT INTO ADAP VALUES (?,?,?,?,?,?,?)"); $select->execute; while (my ($ID,$STA,$UR,$TY) = $select->fetchrow_array) { $insert->execute($ID,$STA,$UR,$TY,'NULL','N','N'); if(!$insert->err) { $rows2+=1; } } $rows1 = $select->rows(); print "\n Total $rows2 copied out of $rows1 \n"; $rows2=0;
ループ上に実行しつつ切断ならば、我々はループを再接続し続けます。どうすればこれを達成できますか?エラーをキャッチする
はMySQLサーバが離れて行ってしまった「理由を見つける方が良いと思いませんか? my.cnfの 'max_allowed_packet'よりも挿入物が大きいときに、時々このような問題があることがわかりました。 – MichielB