繁体   English   中英

如何进行sql备份?

[英]How to take sql backup?

我想备份我的数据库。 我正在使用mysqldump,它给了我一个空的SQL文件。

<?php
   $dbhost = 'localhost';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'motel';
  echo  $backup_file = "motel\\".$dbname . date("Y-m-d-H-i-s") . '.sql';
  echo "<br>".$command = "mysqldump -h$dbhost -u$dbuser -p$dbpass $dbname >$backup_file";

 system($command);
?>

没有错误,没有预期的输出。 告诉我我在哪里出错,就像我说的那样,每次运行此代码时我都会获取一个SQL文件,但为空。

尝试这个

参加一个教程: https : //chartio.com/resources/tutorials/importing-from-and-exporting-to-files-using-the-mysql-command-line/

从MySQL导出将MySQL数据库导出到文本文件的最佳工具是mysqldump。

要使用mysqldump,您将需要知道适当的MySQL用户的登录凭据,该用户具有导出有关数据库所需的特权。

掌握了这些信息后,输入带有适当标志和选项的mysqldump命令:

$ mysqldump -u my_username -p database_name > output_file_path

使用的选项有:

-u标志指示将跟随MySQL用户名。 -p标志指示应提示我们输入与上述用户名关联的密码。 当然,database_name是要导出的数据库的确切名称。 >符号是STDOUT的Unix指令,它允许Unix命令将发出的命令的文本结果输出到另一个位置。 在这种情况下,该输出位置是由output_file_path指定的文件路径。 注意:通常建议为output_file_path输入完全限定的路径和文件名,因此将在所需的位置精确地生成结果文件。

例如,要将books数据库作为book_admin用户导出到〜/ backup / database目录,我们可以使用以下命令:

$ mysqldump -u book_admin -p books > ~/backup/database/books.sql

输入密码:在上面提示时输入密码后,此命令将在相应目录中创建带有.sql后缀(完全可选,但建议)的备份文件。

默认情况下,mysqldump不会保存试图修改实际数据库存在的命令。 相反,默认情况下,仅保存实际表(及其各自的数据),因此将为以后使用此文件导入做准备。 如果您需要导出(然后重新创建)更多数据库的功能,请阅读官方文档中的--databases标志。

只需尝试以下php代码,这会将您的数据库备份到特定文件夹中

 <?php

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '******';
$dbname = "db";
$tables = '*';

function backup_tables($host, $user, $pass, $dbname, $tables = '*') {
    $link = mysqli_connect($host, $user, $pass, $dbname);
    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        exit;
    }
    mysqli_query($link, "SET NAMES 'utf8'");
    if ($tables == '*') {
        $tables = array();
        $result = mysqli_query($link, 'SHOW TABLES');
        while ($row = mysqli_fetch_row($result)) {
            $tables[] = $row[0];
        }
    } else {
        $tables = is_array($tables) ? $tables : explode(',', $tables);
    }
    $return = '';
    foreach ($tables as $table) {
        $result = mysqli_query($link, 'SELECT * FROM ' . $table);
        $num_fields = mysqli_num_fields($result);
        $num_rows = mysqli_num_rows($result);
        $return.= 'DROP TABLE IF EXISTS ' . $table . ';';
        $row2 = mysqli_fetch_row(mysqli_query($link, 'SHOW CREATE TABLE ' . $table));
        $return.= "

" . $row2[1] . ";

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


";
    }
    date_default_timezone_set('Asia/Kolkata');
   $date=date('Y-m-d'); 

 $target_dir="E:\DbBackup\ $date";  

if(!is_dir($target_dir))    {   

mkdir($target_dir,0777);

}   
$fileName = $target_dir.'\db-backup.sql'; 

  $handle = fopen($fileName, 'w+');  
 fwrite($handle, $return);   
}
?>

调用函数:

backup_tables($dbhost, $dbuser, $dbpass, $dbname, $tables);

系统可能无法识别mysqldump命令,您需要为mysqldump.exe设置完整的二进制路径

注意:在我的情况下c:\\ wamp64 \\ bin \\ mysql \\ mysql5.7.26 \\ bin

在您的情况下验证正确的路径,还要检查输出文件的路径

  <?php
   $dbhost = 'localhost';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'motel';
   $backup_file = $dbname . date("Y-m-d-H-i-s") . '.sql';

  /*******
    if password is empty then no need to use password within command line 
    (if password present then only add --password=your_pass)
    Add mysql bin path to work mysqldump properlly and also set oputput file path 
    ******/
    $cmd  = "c: & cd c:\wamp64\bin\mysql\mysql5.7.26\bin & mysqldump.exe --user=$dbuser --host=$dbhost  $dbname> c:\wamp64\www\motel\\$backup_file";
   echo $cmd;

 system($command);
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM