西山 博実
hnish****@skygr*****
2008年 9月 5日 (金) 13:12:04 JST
前回のDBバックアップ、mysqldumpのサンプルコードの訂正です。 [過去ログ] http://lists.sourceforge.jp/mailman/archives/testlinkjp-users/2007-November/000040.html で記載されています、 MySQLのバックアップについては以下のページをご参照ください。 http://programnet.hp.infoseek.co.jp/database/backup.html の記事でもmysqldumpに、-l(エル)オプションを付加していませんが、 DBアクセスがあり得る状態でのバックアップでは、 -l を付けて、全てのテーブルをロックしてから処理すべきです。 これが無い場合はテーブル単位にしかロックされませんので、 テーブル間の不整合が発生し得ます。 つまり、下記の様にするのが正しいコードとなります。 // データベースのエクスポートshellコマンドの作成 $shell = sprintf("mysqldump %s > %s --host=%s --user=%s --password=%s -l", $this->myDB, $DbSqlFile, $this->myServer, $this->myUser, $this->myPass ); 尚、mysqldumpのリファレンスマニュアルには、 http://dev.mysql.com/doc/refman/4.1/ja/mysqldump.html 大規模DBでのmysqldumpではメモリ資源を大きく取るので 「同じサーバ上でバックアップを行う場合には、mysqlhotcopy の方の使用を」 とあります。 mysqlhotcopyは、全てのテーブルをロックして、cpで物理コピーするために高速で、 DBバックアップでは通常、こちらを使用するようです。 http://dev.mysql.com/doc/refman/4.1/ja/mysqlhotcopy.html 以上です。 ----- Original Message ----- From: "西山 博実" <hnish****@skygr*****> To: "TestLink JP Users ML" <testl****@lists*****> Sent: Friday, August 08, 2008 5:46 PM Subject: [Testlinkjp-users] DBバックアップ機能についての要望 > 川西さんへ > > こんばんは、西山です。 > > DBバックアップ機能についての要望です。 > > TestLink(TestLink 1.8)に、DBバックアップ機能があると管理者は楽だと思います。 > > > > > > > そこで、adminでloginした場合には、DBのエクスポートとインポートの > メニューを追加するのは、いかがでしょう? > > よろしく、ご検討ねがいます。 > (8/9〜17は夏休みでメールができません。 ゴメンナサイ!) > > phpコードは自作システムのものです。 > →Windows(XAMPP)では動作しませんが、Windows(XAMPP)ではphpMyAdmin > が付いてくるので、phpMyAdminでDBバックアップができます。 > > > ■DBの管理 > ・[エクスポート] > →定期的にエクスポートすることで、SQLファイルにバックアップできます。 > →SQLファイル(<datadir>/testlink/db.sql)が作成(更新)された事をファイルの更新日時で確認してください。 > > ・[インポート] > →DBを全消去してからインポートします。 > →前回エクスポートしたSQLファイルより、DBが復元できます。 > > > ////////////////////////////////////////// > // > // データベースのエクスポート関数 →Windows(XAMPP)では動作しません > // > // 引数 :無し > // 戻り値:出力SQLファイル > ////////////////////////////////////////// > function DB_export(){ > > // サーバー定数の設定 > $this->set_server_var(); > > // DB SQLファイル > if( 1 == $this->LocalSys ){ > $DbSqlFile = $this->DbSqlFileLocal; > } > else { > $DbSqlFile = $this->DbSqlFileHost; > } > > // データベースのエクスポートshellコマンドの作成 > $shell = sprintf("mysqldump %s > %s --host=%s --user=%s --password=%s", > $this->myDB, > $DbSqlFile, > $this->myServer, > $this->myUser, > $this->myPass > ); > > // shellコマンドの実行 > $result = shell_exec($shell); > > printf("<b><p>DATABASEの「%s」を「%s」へエクスポートしました。</p></b>", > $this->myDB, $DbSqlFile); > > // 戻り値:出力SQLファイル > return $DbSqlFile; > } > > ////////////////////////////////////////// > // > // データベースのインポート関数 →Windows(XAMPP)では動作しません > // > // 引数 :無し > // 戻り値:入力SQLファイル > ////////////////////////////////////////// > function DB_import(){ > > // サーバー定数の設定 > $this->set_server_var(); > > // DB SQLファイル > if( 1 == $this->LocalSys ){ > $DbSqlFile = $this->DbSqlFileLocal; > } > else { > $DbSqlFile = $this->DbSqlFileHost; > } > > // データベースのインポートshellコマンドの作成 > $shell = sprintf("mysql %s < %s --host=%s --user=%s --password=%s", > $this->myDB, > $DbSqlFile, > $this->myServer, > $this->myUser, > $this->myPass > ); > > // shellコマンドの実行 > $result = shell_exec($shell); > > printf("<b><p>DATABASEの「%s」へ「%s」をインポートしました。</p></b>", > $this->myDB, $DbSqlFile); > > // 戻り値:出力SQLファイル > return $DbSqlFile; > } > > _______________________________________________ > Testlinkjp-users mailing list > Testl****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/testlinkjp-users >