PDA

View Full Version : بک آپ گیری از دیتابیس به طور مداوم



olampiad
پنج شنبه 07 آبان 1394, 15:00 عصر
سلام و خسته نباشید
تو یه پروژه ای کار میکنم که پک آپ گیری از دیتابیس خیلی واسشون مهمه.
یعنی دوست دارن سیستم روزانه واسشون پک آپ بگیره.
ب نظرتون بهترین کار چیه؟
من ی دکمه بزارم که هرموقع که دلشون خواست از دیتابیس بک آپ بگیرن یا اینکه برنامه ای بنویسم که روزانه به طور خودکار بک آپ بدهد.
و سوال دیگه ای که دارم اینه:
برای بک آپ گرفتن از دیتابیس در مای اسکیوال وارد phpmyadmin میشیم بعدش دیتابیس مورد نظرمون رو انتخاب میکنیم و روی دکمه export کلیک میکنیم و از اون بک آپ میگیریم.
حالا من میخوام که امر بک آپ گیری به کمک خود پی اچ پی صورت بگیره و خود سیستم به طور خود کار پک آپ بده:
چون کاربران معمولی دیگه phpmyadmin رو نمیشناسن.
حالا خواستم ببینم آیا میشه با پی اچ پی از دیتابیس بک آپ گرفت و هرموقع که این بکاپ رو خواستم وارد phpmyadmin کنم و استفاده کنم.
یعنی منظورم اینه که بک آپی که میگیرم مثل بک آپ خود phpmyadmin باشه و هرموقع که خواستم بتونم ازش استفاده کنم.
خیلی ممنون

ب نظرتون برای بک آپ گیری مداوم از چ روش هایی استفاده کنم(یعنی از چ قائده های استفاده کنم)؟
خیلی ممنون

milad_d993
پنج شنبه 07 آبان 1394, 16:42 عصر
cron job :متفکر:

olampiad
پنج شنبه 07 آبان 1394, 20:51 عصر
آیا localhost معمولی cron job داره:
یعنی همان xxamp که روی کامپیوتر هستش cron job داره.
من چطوری میتونم بک آپ تهیه کنم.
با کمک php
ممنون

olampiad
پنج شنبه 07 آبان 1394, 21:04 عصر
به این کد ی نگا بندازید.



$command = 'mysql'.' --host=' . $vals['localhost']. ' --user=' . $vals['root']. ' --password=' . $vals['']. ' --database=' . $vals['samin']. ' --execute="SOURCE ' . $script_path;$output1 = shell_exec($command . '/site_db.sql"');$output2 = shell_exec($command . '/site_structure.sql"');

من سرچ کردم و این کد رو پیدا کردم.
ولی اینو مینویسم ارور میده.
خیلی ممنون

olampiad
پنج شنبه 07 آبان 1394, 21:44 عصر
من بعد از سرچ به این کد رسیدم.
ولی این کد هم کار نمیکنه.


$url=$_SERVER["MYSQL_HOME"];system("$url\\mysqldump --user=root --password= --host=localhost res > backup.sql");

milad_d993
پنج شنبه 07 آبان 1394, 22:12 عصر
کنترل پنل Zpanel که free هم هست و قابلیت نصب رو ویندوز رو داره. احتمالا از اون به cron job یا یه چیزی که کارتون رو راه بندازه دسترسی پیدا میکنین...

olampiad
جمعه 08 آبان 1394, 12:36 عصر
این کلاس کارمو راه انداخت


<?phperror_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 Namedefine("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 . ";\n\n"; $sql .= 'USE ' . $this->dbName . ";\n\n";
/* 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.= "\n\n" . $row2[1] . ";\n\n";
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.="\n\n\n"; //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; }
}?>