|
|
|
backup mysql ผ่านหน้าเว็บ พอมีแนวทางบ้างไหมครับ . . . |
|
|
|
|
|
|
|
$backdb = "C:/MyshopBackup/".$date_mark."MyTransfer.sql"; // พาร์ทจัดเก็บ
part ตรงนี้ บน host ได้กำหนด permission หรือยังครับ
|
|
|
|
|
Date :
2015-07-05 13:35:34 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C:/AppServ/MySQL/bin/mysqldump
C:/MyshopBackup/
บนโฮสท์จริงไม่มีพาทพวกนี้มั้งครับ
|
ประวัติการแก้ไข 2015-07-05 13:47:47
|
|
|
|
Date :
2015-07-05 13:40:35 |
By :
cowboycnx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พาร์ทปรับตามแล้วครับทุกอย่างไม่น่ามีปัญหา
เหมือนจะเป็นปัญหาจะเกิดจากที่โฮสต์ไม่เปิดให้รับคำสั่ง exec ครับ . . .
โทรถามเมื่อกี้เค้าก็บอกว่า ไม่รองรับ exec . . ทำอย่างไรดีครับ
|
|
|
|
|
Date :
2015-07-05 13:45:55 |
By :
meannerss |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2015-07-05 14:01:09 |
By :
cowboycnx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอมีวิธีดึงเอา DB ออกมาเป็นไฟล์ .SQL โดยไม่ใช้คำสั่ง exec บ้างไหมครับ
|
|
|
|
|
Date :
2015-07-05 15:19:32 |
By :
meannerss |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คงต้องเขียนเองแล้วล่ะครับCode (PHP)
$db=new mysqli('host', 'user', 'psw', 'dbname');
$tb = $db->query('show tables');
while( $tb_ro= $tb->fetch_row()){
$rs = $db->query('select * from '.$tb_ro[0]);
$values='';
while($ro=$rs->fetch_row()){
$row = ''
foreach($ro as $field){
if( preg_match('/^[0-9]+(\.[0-9]+)*$/', $field)) $fld = "'$field'"; // ตรวจสอบ ตัวเลข
else if(preg_match('/[\x00-\x1f]/', $field)) $fld='0x'.bin2hex($field); // ตรวจสอบ blob | binary string
else $fld = "'".$db->real_escape_string($field)."'";
$row .= ($row? ',' : '') . $fld;
}
$values .= ($values? ',' : '') . "($row)";
}
$target=$tb_ro[0].date('Ymd').'.sql';
fwrite( $f=fopen( $target, 'w'), 'insert into '.$tb_ro[0].' values '.$values.';'); fclose($f);
}
เป็นตัวอย่างคร่าวๆ ไม่ได้เก็บรายละเอียดของโครงสร้าง
ซึ่งโครงสร้างส่วนนี้ น่าจะนานๆทำครั้ง ใช้ phpmyadmin เก็บโครงสร้าง ไว้ แล้ว FTP ไปเก็บไว้เป็นอีกไฟล์ต่างหาก
หรือถ้าอยากเขียนโครงสร้าง ด้วยก็ลองใช้คำสั่งนี้ครับ
$db->query('DESCRIBE test');
แล้วเขียนโค๊ด SQL เลียนแบบ การสร้าง create table ตามข้อมูลที่ได้ครับ
ปล. ไม่ได้ทดสอบ
|
ประวัติการแก้ไข 2015-07-05 15:31:29
|
|
|
|
Date :
2015-07-05 15:29:35 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<?php
include 'config.php';
$newDB = new DB();
$newDB2 = new DB();
$backupFile = "backup/transport-".date('Y-m-d').".sql';
$sql = "show tables";
$res = $newDB->query($sql);
while($data = $newDB->fetch_array()){
$sql2 = "SELECT * INTO OUTFILE '$backupFile' FROM {$data[0]}";
$newDB2->query($sql2);
}
include 'closedb.php';
?>
// ถ้าจะโหลดข้อมูลคืนตาราง
// "LOAD DATA INFILE 'backup/transport-2015-07-05' INTO TABLE $tableName";
|
|
|
|
|
Date :
2015-07-05 19:18:21 |
By :
cowboycnx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
งมไปงมมาในที่สุดก็ได้แล้วครับ
สามารถ backup เป็นไฟล์ .sql ที่อยู่บนแชร์โฮสได้
ได้ลองนำมารันเพื่อรีสโตร์กลับได้ข้อมูลครบถ้วนสมบูรณ์
**ก่อนอื่นต้องสร้างโฟลเดอร์ชื่อ cache ไว้บนไดเรคเทอรี่ระดับเดียวกับที่วางไฟล์นี้ด้วยนะครับ
ปล. ติดปัญหานิดหน่อยเรื่อง ereg_replace ไว้ถามในคอมเม้นข้างล่างนะครับ
Code (PHP)
<?
// Report all errors
error_reporting(E_ALL);
/**
* Define database parameters here
*/
define("DB_USER", 'xxxxxxxxxxxxxxxxxxxxxxx');
define("DB_PASSWORD", 'yyyyyyyyyyyyyyyyy');
define("DB_NAME", 'zzzzzzzzzzzzzzz');
define("DB_HOST", 'localhost');
define("OUTPUT_DIR", 'cache');
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;
/**
* The Backup_Database class
*/
class Backup_Database {
/**
* Host where database is located
*/
var $host = 'localhost';
/**
* Username used to connect to database
*/
var $username = 'xxxxxxxxxxxxxxxxxxxxxxx';
/**
* Password used to connect to database
*/
var $passwd = 'yyyyyyyyyyyyyyyyy';
/**
* Database to backup
*/
var $dbName = 'zzzzzzzzzzzzzzz';
/**
* Database charset
*/
var $charset = 'cache';
/**
* 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);
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" . "
";
}
}
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.'/db-backup-'.$this->dbName.'-'.date("Ymd-His", time()).'.sql','w+');
fwrite($handle, $sql);
fclose($handle);
}
catch (Exception $e)
{
var_dump($e->getMessage());
return false;
}
return true;
}
}
?>
|
|
|
|
|
Date :
2015-07-14 20:17:05 |
By :
meannerss |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปัญหา ereg_replace ขึ้น error เต็มหน้าเลยครับ Deprecated: Function ereg_replace() is deprecated.... (แต่ไฟล์.sql ก็ export และใช้งานได้นะครับ )
ลองศึกษาดูเค้าบอกว่า php ตอนอัพจาก 5.2 เป็น 5.3 ให้ใช้ preg_replace เข้ามาแทนที่
เลยลองเอา preg_replace เข้าแทน ereg_replaceในไลน์ 129 ปรากฎว่าขึ้น error
ดังนี้ครับ Warning: preg_replace(): Empty regular expression in...
แก้ใขอย่างไรดี
edit ได้แล้วครับ เปลี่ยน line 129 เป็นดังนี้
Code (PHP)
$row[$j] = preg_replace("#\n#", "\\n", $row[$j]);
|
ประวัติการแก้ไข 2015-07-14 20:42:35
|
|
|
|
Date :
2015-07-14 20:21:42 |
By :
meannerss |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|