[Testlinkjp-users] DBバックアップ機能についての要望

Back to archive index

西山 博実 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
>




Testlinkjp-users メーリングリストの案内
Back to archive index