رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بک آپ گیری از دیتابیس به طور مداوم
#1
سلام و خسته نباشید
تو یه پروژه ای کار میکنم که پک آپ گیری از دیتابیس خیلی واسشون مهمه.
یعنی دوست دارن سیستم روزانه واسشون پک آپ بگیره.
ب نظرتون بهترین کار چیه؟
من ی دکمه بزارم که هرموقع که دلشون خواست از دیتابیس بک آپ بگیرن یا اینکه برنامه ای بنویسم که روزانه به طور خودکار بک آپ بدهد.
و سوال دیگه ای که دارم اینه:
برای بک آپ گرفتن از دیتابیس در مای اسکیوال وارد phpmyadmin میشیم بعدش دیتابیس مورد نظرمون رو انتخاب میکنیم و روی دکمه export کلیک میکنیم و از اون بک آپ میگیریم.
حالا من میخوام که امر بک آپ گیری به کمک خود پی اچ پی صورت بگیره و خود سیستم به طور خود کار پک آپ بده:
چون کاربران معمولی دیگه phpmyadmin رو نمیشناسن.
حالا خواستم ببینم آیا میشه با پی اچ پی از دیتابیس بک آپ گرفت و هرموقع که این بکاپ رو خواستم وارد phpmyadmin کنم و استفاده کنم.
یعنی منظورم اینه که بک آپی که میگیرم مثل بک آپ خود phpmyadmin باشه و هرموقع که خواستم بتونم ازش استفاده کنم.
خیلی ممنون

ب نظرتون برای بک آپ گیری مداوم از چ روش هایی استفاده کنم(یعنی از چ قائده های استفاده کنم)؟
خیلی ممنون
پاسخ
تشکر شده توسط:
#2
من بعد از سرچ به این کد رسیدم.
$url=$_SERVER["MYSQL_HOME"];
system("$url\mysqldump --user=root --password= --host=localhost res > backup.sql");

ولی این کد هم کار نمیکنه.
پاسخ
تشکر شده توسط:
#3
شک نکن که داری اشتباهی میکنی. این res اسم دیتابیس شماست درست نوشتی؟
پاسخ
تشکر شده توسط: olampiad
#4
(08-08-1394، 10:14 ق.ظ)راوندی نوشته: شک نکن که داری اشتباهی میکنی. این res اسم دیتابیس شماست درست نوشتی؟

به تصویر ی نگا بندازید.
من میخوام از این دیتابیس بک آپ بگیرم.
ممنون


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#5
سلام به این تصویر ی نگا بندازید.
من میخوام ی چنین چیزی درست کنم.
خودم هرموقع بخوام از دیتابیس بک آپ بگیرم مثل تصویر بالا عمل میکنم.
ولی
چون کاربران معمولی دیگه phpmyadmin رو نمیشناسن:
میخوام کدی بنویسم که کاربران در داخل برنامه با زدن یک دکمه بتونن از دیتابیس بکآپ بگیرن.

دقیقا میخوام همین عمل تو خود php و در داخل برنامه خودم انجام بشه.
ممنون


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#6
این کلاس رو از نت پیدا کردم و کارمو راه انداخت.



<?php
error_reporting(E_ALL);

/* Define database parameters here */
define("DB_USER", 'root');
define("DB_PASSWORD", '');
define("DB_NAME", 'res');
define("DB_HOST", 'localhost');
define("OUTPUT_DIR", 'db'); // Folder / Directory Name
define("TABLES",'*');

/* Instantiate Backup_Database and perform backup */
$backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? 'OK' : 'KO';
//echo "Backup result: " . $status . " - By Irshad Khan";

/* The Backup_Database class */

class Backup_Database {
/* Host where database is located  */

  var $host = 'localhost';
  var $username = 'root';
  var $passwd = '';
  var $dbName = 'res';
  var $charset = '';

  /* Constructor initializes database */

  function Backup_Database($host, $username, $passwd, $dbName, $charset = 'utf8') {
    $this->host = $host;
    $this->username = $username;
    $this->passwd = $passwd;
    $this->dbName = $dbName;
    $this->charset = $charset;
    $this->initializeDatabase();
  }

  protected function initializeDatabase() {
    $conn = @mysql_connect($this->host, $this->username, $this->passwd); // Ik Added @ to Hide PDO Error Message
    mysql_select_db($this->dbName, $conn);
    if (!mysql_set_charset($this->charset, $conn)) {
      mysql_query('SET NAMES ' . $this->charset);
    }
  }

  /* Backup the whole database or just some tables Use '*' for whole database or 'table1 table2 table3...' @param string $tables  */

  public function backupTables($tables = '*', $outputDir = '.') {
    try {
      /* Tables to export  */
      if ($tables == '*') {
        $tables = array();
        $result = mysql_query('SHOW TABLES');
        while ($row = mysql_fetch_row($result)) {
          $tables[] = $row[0];
        }
      } else {
        $tables = is_array($tables) ? $tables : explode(',', $tables);
      }

      $sql = 'CREATE DATABASE IF NOT EXISTS ' . $this->dbName . ";nn";
      $sql .= 'USE ' . $this->dbName . ";nn";

  /* Iterate tables */
  foreach ($tables as $table) {
    //echo "Backing up " . $table . " table...";

    $result = mysql_query('SELECT * FROM ' . $table);
    $numFields = mysql_num_fields($result);

    $sql .= 'DROP TABLE IF EXISTS ' . $table . ';';
    $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE ' . $table));
    $sql.= "nn" . $row2[1] . ";nn";

    for ($i = 0; $i < $numFields; $i++) {
      while ($row = mysql_fetch_row($result)) {
        $sql .= 'INSERT INTO ' . $table . ' VALUES(';
        for ($j = 0; $j < $numFields; $j++) {
          $row[$j] = addslashes($row[$j]);
          // $row[$j] = ereg_replace("n", "\n", $row[$j]);
          if (isset($row[$j])) {
            $sql .= '"' . $row[$j] . '"';
          } else {
            $sql.= '""';
          }
          if ($j < ($numFields - 1)) {
            $sql .= ',';
          }
        }
        $sql.= ");n";
      }
    }
    $sql.="nnn";
    //echo " OK <br/><br/>" . "";
  }
} catch (Exception $e) {
  var_dump($e->getMessage());
  return false;
 }

    return $this->saveFile($sql, $outputDir);
  }

  /* Save SQL to file @param string $sql */

  protected function saveFile(&$sql, $outputDir = '.') {
    if (!$sql)
      return false;

    try {
      $handle = fopen($outputDir . '/' . $this->dbName . '-' . date("Ymd-His", time()) . '.sql', 'w+');
      fwrite($handle, $sql);
      fclose($handle);
    } catch (Exception $e) {
      var_dump($e->getMessage());
      return false;
    }
    return true;
  }

}
?>






































پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان