[英]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.