Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách sao lưu / xuất cơ sở dữ liệu MySQL bằng PHP

Sao lưu cơ sở dữ liệu thường xuyên là nhiệm vụ rất quan trọng đối với các nhà phát triển. Nó ngăn ngừa rủi ro mất dữ liệu nếu có bất kỳ sự cố nào xảy ra trên máy chủ như hack hoặc sập máy chủ. Vì vậy, bạn phải thiết lập sao lưu cơ sở dữ liệu theo lịch trình để tránh mất mát dữ liệu trong tương lai.

Bạn có thể sao lưu cơ sở dữ liệu mysql theo nhiều cách. Bạn có thể đăng nhập trực tiếp vào bảng điều khiển lưu trữ của mình và sao lưu toàn bộ chỉ bằng vài cú nhấp chuột nhưng nếu không có quyền truy cập vào bảng điều khiển, bạn có thể tạo tập lệnh PHP đơn giản và đặt nó thành sao lưu theo lịch trình. Vì vậy, trong bài viết này, tôi sẽ chia sẻ tập lệnh PHP hữu ích sau để sao lưu / xuất cơ sở dữ liệu MySql.


Sử dụng PHP Script sau để sao lưu cơ sở dữ liệu Mysql

<?php 
    // Pass your database information
    $mysqlUserName      = "db Username";
    $mysqlPassword      = "db Password";
    $mysqlHostName      = "db Hostname";
    $DbName             = "database name which you want to take backup";
    $backup_name        = "backup file name"; //optional
    $tables             = "Your tables"; //optional 
 
   //or add 5th parameter(array) of specific tables:    array("mytable1","mytable2","mytable3") for multiple tables
 
    exportDB($mysqlHostName,$mysqlUserName,$mysqlPassword,$DbName,  $tables=false, $backup_name=false );
 
    function exportDB($host,$user,$pass,$name,  $tables=false, $backup_name=false )
    {
        $mysqli = new mysqli($host,$user,$pass,$name); 
        $mysqli->select_db($name); 
        $mysqli->query("SET NAMES 'utf8'");
 
        $queryTables    = $mysqli->query('SHOW TABLES'); 
        while($row = $queryTables->fetch_row()) 
        { 
            $target_tables[] = $row[0]; 
        }   
        if($tables !== false) 
        { 
            $target_tables = array_intersect( $target_tables, $tables); 
        }
        foreach($target_tables as $table)
        {
            $result         =   $mysqli->query('SELECT * FROM '.$table);  
            $fields_amount  =   $result->field_count;  
            $rows_num=$mysqli->affected_rows;     
            $res            =   $mysqli->query('SHOW CREATE TABLE '.$table); 
            $TableMLine     =   $res->fetch_row();
            $content        = (!isset($content) ?  '' : $content) . "\n\n".$TableMLine[1].";\n\n";
 
            for ($i = 0, $st_counter = 0; $i < $fields_amount;   $i++, $st_counter=0) 
            {
                while($row = $result->fetch_row())  
                { //when started (and every after 100 command cycle):
                    if ($st_counter%100 == 0 || $st_counter == 0 )  
                    {
                            $content .= "\nINSERT INTO ".$table." VALUES";
                    }
                    $content .= "\n(";
                    for($j=0; $j<$fields_amount; $j++)  
                    { 
                        $row[$j] = str_replace("\n","\\n", addslashes($row[$j]) ); 
                        if (isset($row[$j]))
                        {
                            $content .= '"'.$row[$j].'"' ; 
                        }
                        else 
                        {   
                            $content .= '""';
                        }     
                        if ($j<($fields_amount-1))
                        {
                                $content.= ',';
                        }      
                    }
                    $content .=")";
                    //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler
                    if ( (($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) 
                    {   
                        $content .= ";";
                    } 
                    else 
                    {
                        $content .= ",";
                    } 
                    $st_counter=$st_counter+1;
                }
            } $content .="\n\n\n";
        }
        //$backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql";
        $backup_name = $backup_name ? $backup_name : $name.".sql";
        header('Content-Type: application/octet-stream');   
        header("Content-Transfer-Encoding: Binary"); 
        header("Content-disposition: attachment; filename=\"".$backup_name."\"");  
        echo $content; exit;
    }
?>




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ClassCastException:java.math.BigInteger không thể được truyền sang java.lang.Long khi kết nối với MySQL

  2. Bạn không thể chỉ định bảng đích để cập nhật trong mệnh đề FROM

  3. MySQL:nhiều bảng hay một bảng có nhiều cột?

  4. Cách thực hiện xếp hạng theo nhóm trong MySQL

  5. Làm thế nào để khắc phục các sự cố thường gặp với cơ sở dữ liệu MySQL?