Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > backup mysql ผ่านหน้าเว็บ พอมีแนวทางบ้างไหมครับ . . .



 

backup mysql ผ่านหน้าเว็บ พอมีแนวทางบ้างไหมครับ . . .

 



Topic : 117570



โพสกระทู้ ( 1,666 )
บทความ ( 0 )



สถานะออฟไลน์




อยากจะทำระบบงานดังนี้ครับ
ระบบสำรองข้อมูล
1. ส่งออกข้อมูลออกมาเป็นไฟล์ .sql โดยผ่านฟอร์มหน้าเว็บ (แบบไม่ต้องเข้าไปยุ่งเกียวกับ DBMS)
2. เซฟไฟล์ .sql ที่ได้ลงบนโฮสต์ตัวเดียวกันนั้นเหละ
3. ส่ง email แนบไฟล์ .sql ไปยัง email ปลายทางที่ระบุ


ปกติผมทำบน lacalhost บันทึกได้ด้วยโค้ดนี้ แต่พอลง host จริง มันไม่ได้ครับ โฮสต์ที่เช่าอยู่เขาไม่รองรับคำสั่ง exec

Code (PHP)
<?
// เริ่มการสำรองข้อมูล
date_default_timezone_set('Asia/Bangkok');
$date_mark=date("Y-m-d");  
$backdb = "C:/MyshopBackup/".$date_mark."MyTransfer.sql"; // พาร์ทจัดเก็บ
$host="localhost";
$user="root";
$pw="1234";
$dbname="transfer";
$sql = ("C:/AppServ/MySQL/bin/mysqldump --host=$host --user=$user --password=$pw $dbname > $backdb");
exec($sql); 
$bw=1;
BW($bw,$date_mark);
echo 
"<div>
<script type='text/javascript'>
   alert('***สำรองข้อมูลสำเร็จ***');
</script>
</div>";
echo "<meta http-equiv='refresh' content='0;URL=f_print.php'>";
?>




Tag : PHP









ประวัติการแก้ไข
2015-07-05 13:11:12
2015-07-05 13:11:49
2015-07-05 13:44:11
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2015-07-05 13:10:09 By : meannerss View : 2300 Reply : 12
 

 

No. 1



โพสกระทู้ ( 9,559 )
บทความ ( 2 )



สถานะออฟไลน์


$backdb = "C:/MyshopBackup/".$date_mark."MyTransfer.sql"; // พาร์ทจัดเก็บ

part ตรงนี้ บน host ได้กำหนด permission หรือยังครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 13:35:34 By : Chaidhanan
 


 

No. 2



โพสกระทู้ ( 212 )
บทความ ( 0 )



สถานะออฟไลน์


Quote:
ไปตั้งสคริปใน CRON ครับ(server linux)

เราจะสำรอง MySQL ทุกวันเวลา 3:10

10 3 * * * root mysqldump -u root -pPASSWORD --all-databases | gzip > /mnt/disk2/database_`data '+%m-%d-%Y'`.sql.gz

"10 3 * * *" จะหมายถึง "นาที, ชั่วโมง, วันที่ในเดือน, เดือน, วันในสัปดาห์" ซึ่งสัญลักษณ์ '*' หมายถึงทุกกรณี.

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 13:38:19 By : cowboycnx
 

 

No. 3



โพสกระทู้ ( 212 )
บทความ ( 0 )



สถานะออฟไลน์


C:/AppServ/MySQL/bin/mysqldump
C:/MyshopBackup/
บนโฮสท์จริงไม่มีพาทพวกนี้มั้งครับ


ประวัติการแก้ไข
2015-07-05 13:47:47
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 13:40:35 By : cowboycnx
 


 

No. 4



โพสกระทู้ ( 1,666 )
บทความ ( 0 )



สถานะออฟไลน์


พาร์ทปรับตามแล้วครับทุกอย่างไม่น่ามีปัญหา
เหมือนจะเป็นปัญหาจะเกิดจากที่โฮสต์ไม่เปิดให้รับคำสั่ง exec ครับ . . .
โทรถามเมื่อกี้เค้าก็บอกว่า ไม่รองรับ exec . . ทำอย่างไรดีครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 13:45:55 By : meannerss
 


 

No. 5



โพสกระทู้ ( 212 )
บทความ ( 0 )



สถานะออฟไลน์



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 14:01:09 By : cowboycnx
 


 

No. 6



โพสกระทู้ ( 1,666 )
บทความ ( 0 )



สถานะออฟไลน์


พอมีวิธีดึงเอา DB ออกมาเป็นไฟล์ .SQL โดยไม่ใช้คำสั่ง exec บ้างไหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 15:19:32 By : meannerss
 


 

No. 7



โพสกระทู้ ( 9,559 )
บทความ ( 2 )



สถานะออฟไลน์


คงต้องเขียนเองแล้วล่ะครับ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
 


 

No. 8



โพสกระทู้ ( 1,666 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : Chaidhanan เมื่อวันที่ 2015-07-05 15:29:35
รายละเอียดของการตอบ ::
อ่อกระจ่างเลยครับ ใช้ phpเก็บโครงสร้างส่วนฟิลด์ต่างๆฐานข้อมูลไว้ในไฟล์ แล้ว ใช้ fwrite เข้าไป edit textไฟล์ โดยเพิ่มเข้าแค่ส่วนที่เรคคอร์ดข้อมูล พี่สุดยอดมากครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-05 15:34:25 By : meannerss
 


 

No. 9



โพสกระทู้ ( 212 )
บทความ ( 0 )



สถานะออฟไลน์


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
 


 

No. 10



โพสกระทู้ ( 1,666 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : cowboycnx เมื่อวันที่ 2015-07-05 19:18:21
รายละเอียดของการตอบ ::
wow ขอลองก่อนนะครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-07-06 11:08:03 By : meannerss
 


 

No. 11



โพสกระทู้ ( 1,666 )
บทความ ( 0 )



สถานะออฟไลน์


งมไปงมมาในที่สุดก็ได้แล้วครับ
สามารถ 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
 


 

No. 12



โพสกระทู้ ( 1,666 )
บทความ ( 0 )



สถานะออฟไลน์


ปัญหา 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
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : backup mysql ผ่านหน้าเว็บ พอมีแนวทางบ้างไหมครับ . . .
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่