Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да архивирате / експортирате MySQL база данни с помощта на PHP

Редовното архивиране на база данни е много важна задача за разработчиците. Това предотвратява риска от загуба на данни, сякаш възникне някакъв проблем на сървъра, като хакване или срив на сървъра. Така че трябва да зададете планирано архивиране на базата данни, за да предотвратите бъдеща загуба на данни.

Можете да направите резервно копие на базата данни на mysql по много начини. Можете директно да влезете във вашия хостинг cpanel и да направите пълно архивиране само с няколко щраквания, но ако нямате достъп до cpanel, можете да създадете прост PHP скрипт и да го настроите на планирано архивиране. Така че в тази публикация ще споделя следния полезен PHP скрипт за архивиране/експорт на база данни на MySql.


Използвайте следния PHP скрипт, за да направите резервно копие на базата данни на 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. MySQL Вмъкване в множество таблици? (Нормализация на базата данни?)

  2. SELECT / GROUP BY - сегменти от време (10 секунди, 30 секунди и т.н.)

  3. Как да анотирате полето за автоматично нарастване на MYSQL с анотации на JPA

  4. node.js async/await се използва с MySQL

  5. mysql автоматично съхранява времева марка за създаване на запис