Share code Backup dữ liệu MySQL trên PHP

Chào mọi người, để sao lưu database MySQL chúng ta có rất nhiều cách: Bạn có thể dùng PHPMyAdmin, một mã nguồn mở để sao lưu phục hồi, hoặc bạn có thể sử dụng tool của MySQL... Tuy nhiên tôi đang viết một website và tôi muốn tự tạo cho mình một đoạn code PHP có chức năng sao lưu cơ sở dữ liệu MySQL. Sau một hồi lần mò trên internet tôi cũng tìm được một đoạn mã chạy tốt và mang ra chỉnh sửa một xíu cho nó phù hợp với Tiếng Việt

Bạn tạo mới một file PHP và copy đoạn code sau vào:

<?php

backup_tables('localhost','root','','maytinh');


/* Sao lưu cả database hoặc một bảng cụ thể nào đó */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
 
  $link = mysql_connect($host,$user,$pass);
  mysql_select_db($name,$link);
  mysql_query("SET NAMES 'UTF8'");
  //Lấy tất cả các bảng
  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);
  }
 
  //Vòng lặp
  foreach($tables 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] = ereg_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\n";
  }
 
  //save file
  $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
  fwrite($handle,$return);
  fclose($handle);
}
?>

   Ở đây tôi thực hiện sao lưu database có tên là "maytinh" --> File backup sẽ được chuyển đến thư mục gốc của bạn, và bạn có thể tùy chỉnh thư mục này thoải mái. Bài tiếp tôi sẽ hướng dẫn các bạn đoạn code thực hiện phục hồi dữ liệu trên PHP.

8 nhận xét:

  1. Hay quá tìm mãi mới ra đoạn code này. Cảm ơn anh nhé

    Trả lờiXóa
  2. em chưa hiểu cái biến return được khai ra ở đâu mà lúc dùng nó lần đầu tiên lại là return.= làm nó báo lỗi trên trình duyệt vậy :( !!!

    Trả lờiXóa
  3. PHP làm gì có vụ khai báo biến hả bạn ? Đoạn code này tôi chạy bình thường, bạn bị lỗi như thế nào?

    Trả lờiXóa
  4. Bài này thì Ok rồi, mình muốn là làm sao mà nó backup tự động được mới hay, giống như lập lịch cho nó vậy???????

    Trả lờiXóa
  5. bị lỗi này là sao vậy mọi người, sửa giúp mình với, trong vòng lặp foreach :
    Notice: Undefined variable: return

    Trả lờiXóa
  6. Chào bạn, bạn cho mình hỏi, thư mục gốc nằm ở đâu? và file sao lưu được định dạng kiểu file gì vậy? Cảm ơn...

    Trả lờiXóa
  7. cách này không biết còn dùng được không tar

    Trả lờiXóa

Rất mong các ý kiến của các bạn khi đọc bài viết này !