Tự động sao lưu (Backup) MySQL Database bằng PHP

18/02/2014

Nếu các bạn đang sở hữu một trang blog hay web thì việc sao lưu cơ sở dữ liệu (Database) là một việc làm hết sức cần thiết và phải được thực hiện thường xuyên. Bởi vì chúng ta sẽ không thể nào biết ngày nào, giờ nào trang web của chúng ta sẽ bị các kẻ xấu hack và bị lỗi. Nếu các bạn không có quá nhiều thời gian để tiến hành sao lưu (backup) bằng tay, thì mình xin chia sẻ cho các bạn một đoạn code bằng PHP. Với đoạn code này, các bạn sẽ có thể ngồi rung đùi mà xem phim hay nghe nhạc, bởi vì việc sao lưu đã được tiến hành tự động theo ngày giờ mà các bạn ấn định.

diagrama-backup-mysql-php

Kết nối CSDL

Đầu tiên, chúng ta sẽ cần tạo một file và đặt tên là connection.php, file này dùng để kết nối tới database mà chúng ta cần tiến hành sao lưu (backup).

<?php
  $host="localhost";
  $uname="YourUserName";
  $pass="YourPassword";
  $database = "YourDatabaseName";
$connection=mysql_connect($host,$uname,$pass);
or die("Database Connection Failed");
$selectdb=mysql_select_db($database) or die("Database could not be selected");
$result=mysql_select_db($database)
or die("database cannot be selected <br>");
?>

Các bạn nhớ thay đổi tên $host, $uname, $pass $database phù hợp với các giá trị trên server của các bạn nhé.

Tiến hành sao lưu :

Để tiến hành sao lưu, các bạn tạo một file mới, rồi copy toàn bộ đoạn code sau vào bên trong nó :

<?php
include("connection.php");
function backup_db(){
/* Luu tru tat ca ten Table vao mot mang */
$allTables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)){
     $allTables[] = $row[0];
}

foreach($allTables as $table){
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);

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

for ($i = 0; $i < $num_fields; $i++) {
while($row = mysql_fetch_row($result)){
   $return.= 'INSERT INTO '.$table.' VALUES(';
     for($j=0; $j<$num_fields; $j++){
       $row[$j] = addslashes($row[$j]);
       $row[$j] = str_replace("\n","\\n",$row[$j]);
       if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; }
       else { $return.= '""'; }
       if ($j<($num_fields-1)) { $return.= ','; }
     }
   $return.= ");\n";
}
}
$return.="\n\n";
}

// Tao Backup Folder
$folder = 'DB_Backup/';
if (!is_dir($folder))
mkdir($folder, 0777, true);
chmod($folder, 0777);

$date = date('m-d-Y-H-i-s', time());
$filename = $folder."db-backup-".$date;

$handle = fopen($filename.'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}

// Goi ham thuc thi
backup_db();
?>

Bây giờ, mỗi khi cần sao lưu , các bạn chỉ cần chạy đoạn code bên trên là okie. Mình mong là qua bài viết này, các bạn sẽ có thể tiết kiệm được nhiều thời gian hơn cho bản thân mình , đồng thời cũng sẽ giúp các bạn có thêm kiến thức trong việc sử dụng PHP.

Chúc các bạn thành công !

Chuyên Mục:

Bài viết được đăng bởi webmaster

Nếu các bạn thấy bài viết hữu ích thì giúp mình Like cái nhé !
  • Huy

    Undefined variable: return in $return.= ‘DROP TABLE IF EXISTS ‘.$table.’;’;
    Mình sửa cái lỗi đó thì đó chỉ in ra được 1 cái bảng trong database mà thôi.
    Bạn coi giúp mình nhé