OSDN Git Service

DBバックアップ機能更新。
authornaoki hirata <naoki@magic3.org>
Fri, 22 Nov 2013 13:06:16 +0000 (22:06 +0900)
committernaoki hirata <naoki@magic3.org>
Fri, 22 Nov 2013 13:06:16 +0000 (22:06 +0900)
include/db/specificDb.php
include/manager/dbManager.php
widgets/admin_main/include/container/admin_mainDbbackupWidgetContainer.php

index 76d6840..9576721 100644 (file)
@@ -8,9 +8,9 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2009 Magic3 Project.
+ * @copyright  Copyright 2006-2013 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
- * @version    SVN: $Id: specificDb.php 1909 2009-05-21 03:14:52Z fishbone $
+ * @version    SVN: $Id$
  * @link       http://www.magic3.org
  */
 require_once(M3_SYSTEM_INCLUDE_PATH . '/db/baseDb.php');
@@ -18,6 +18,7 @@ require_once(M3_SYSTEM_INCLUDE_PATH . '/db/baseDb.php');
 class specificDb extends BaseDb
 {
        protected $_dbName;             // DB名
+       const BACKUP_CMD = 'mysqldump';                 // DBバックアップコマンド
 
        /**
         * コンストラクタ
@@ -78,5 +79,63 @@ class specificDb extends BaseDb
                }
                return $ret;
        }
+       /**
+        * データベースをバックアップ
+        *
+        * @param string $filename              バックアップファイル名
+        * @return bool                                 true=正常、false=異常
+        */
+       function backupDb($filename)
+       {
+               $ret = false;
+               $dbType = $this->getDbType();
+               switch ($dbType){
+                       case M3_DB_TYPE_MYSQL:          // MySQLの場合
+                               $cmd = self::BACKUP_CMD . ' --opt -u' . $this->_connect_user . ' -p' . $this->_connect_password . ' ' . $this->_dbName . ' --single-transaction | zip > ' . $filename;
+                               $ret = $this->_procExec($cmd);
+                               if ($ret == 0){
+                                       $ret = true;
+                               } else {
+                                       $ret = false;
+                               }
+                               break;
+                       case M3_DB_TYPE_PGSQL:          // PostgreSQLの場合
+
+                               break;
+               }
+               return $ret;
+       }
+       /**
+        * シェルコマンドを実行
+        *
+        * @param string $command               コマンド
+        * @param array $output                 標準出力
+        * @param array $errorOutput    標準エラー出力
+        * @return int                                  プロセス終了コード
+        */
+       protected function _procExec($command, &$output = null, &$errorOutput = null)
+       {
+               $retVal = -1;           // 終了コード
+               $descriptorspec = array(
+                       0 => array("pipe", "r"),  // stdin
+                       1 => array("pipe", "w"),  // stdout
+                       2 => array("pipe", "w")   // stderr
+               );
+
+               $process = proc_open($command, $descriptorspec, $pipes, null, null);
+               
+               if (is_resource($process)){
+                       fclose($pipes[0]);
+
+                       $output = stream_get_contents($pipes[1]);
+                       $errorOutput = stream_get_contents($pipes[2]);
+
+                       fclose($pipes[1]);
+                       fclose($pipes[2]);
+                       
+                       $retVal = proc_close($process);
+               }
+               return $retVal;
+       }
 }
 ?>
index fcf5aee..1dd95d9 100644 (file)
@@ -8,9 +8,9 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2009 Magic3 Project.
+ * @copyright  Copyright 2006-2013 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
- * @version    SVN: $Id: dbManager.php 1909 2009-05-21 03:14:52Z fishbone $
+ * @version    SVN: $Id$
  * @link       http://www.magic3.org
  */
 require_once(M3_SYSTEM_INCLUDE_PATH . '/common/core.php');
@@ -262,5 +262,16 @@ class DbManager extends Core
                if ($ret) $size = $row['size'];
                return $size;
        }
+       /**
+        * データベースをバックアップ
+        *
+        * @param string $filename              バックアップファイル名
+        * @return bool                                 true=正常、false=異常
+        */
+       function backupDb($filename)
+       {
+               $ret = $this->specificDb->backupDb($filename);
+               return $ret;
+       }
 }
 ?>
index 0384023..3d02c94 100644 (file)
@@ -78,8 +78,7 @@ class admin_mainDbbackupWidgetContainer extends admin_mainMainteBaseWidgetContai
                if (!file_exists($backupDir)) @mkdir($backupDir, M3_SYSTEM_DIR_PERMISSION, true/*再帰的に作成*/);
 
                if ($act == 'new'){
-       //              $backupFile = self::BACKUP_FILENAME_HEAD . '-`date +\%Y\%m\%d-\%H\%M\%S`.sql.gz';
-                       $backupFile = self::BACKUP_FILENAME_HEAD . date('Ymd-His') . '.sql.gz';
+                       $backupFile = $backupDir . DIRECTORY_SEPARATOR . self::BACKUP_FILENAME_HEAD . date('Ymd-His') . '.sql.zip';
                        $this->gInstance->getDbManager()->backupDb($backupFile);
                } if ($act == 'delete'){                // メニュー項目の削除
                        $listedItem = explode(',', $request->trimValueOf('filelist'));
@@ -153,7 +152,7 @@ class admin_mainDbbackupWidgetContainer extends admin_mainMainteBaseWidgetContai
                while (($file = $dir->read()) !== false){
                        $filePath = $path . DIRECTORY_SEPARATOR . $file;
                        // カレントディレクトリかどうかチェック
-                       if ($file == '.' || $file == '..') continue;
+                       if ($file == '.' || $file == '..' || !strStartsWith($file, self::BACKUP_FILENAME_HEAD)) continue;
                        $fileList[] = $file;
                }
                $dir->close();