我想备份我的数据库。我正在使用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文件,但为空。
答案 0 :(得分:2)
尝试一下
从MySQL导出 将MySQL数据库导出到文本文件的最佳工具是mysqldump。
要使用mysqldump,您将需要知道适当的MySQL用户的登录凭据,该用户具有必要的特权以导出相关数据库。
掌握了这些信息后,输入带有相应标志和选项的mysqldump命令:
int fsize;
std::string filebuf( '0', 1024 );
while ( ( fsize = recv( sockfd, filebuf.data( ), filebuf.size( ), 0 ) ) > 0 )
{
if( std::size_t index{ filebuf.find( "#end", 0 ) };
index != std::string::npos )
{
// The line terminator was found so don't call the
// the receive function again as there should be nothing
// remaining in the stream to read.
}
/*Write the data to your file.*/
filebuf.clear( );
}
respond("Received file.\n");
正在使用的选项是:
-u标志指示将跟随MySQL用户名。 -p标志指示应提示我们输入与上述用户名关联的密码。 当然,database_name是要导出的数据库的确切名称。 >符号是STDOUT的Unix指令,它允许Unix命令将发出的命令的文本结果输出到另一个位置。在这种情况下,该输出位置是由output_file_path指定的文件路径。 注意:通常建议为output_file_path输入完全限定的路径和文件名,这样就可以在所需的位置生成生成的文件。
例如,要将books数据库作为book_admin用户导出到〜/ backup / database目录,我们可以使用以下命令:
var XLSX = require('xlsx');
var workbook = XLSX.readFile('./test.xlsx');
var sheet_name_list = workbook.SheetNames;
let columnHeaders = [];
for (var sheetIndex = 0; sheetIndex < sheet_name_list.length; sheetIndex++) {
var worksheet = workbook.Sheets[sheet_name_list[sheetIndex]];
for (let key in worksheet) {
let regEx = new RegExp("^\(\\w\)\(1\){1}$");
if (regEx.test(key) == true) {
columnHeaders.push(worksheet[key].v);
}
}
}
输入密码: 在出现以上提示时输入密码后,此命令将在相应目录中创建带有.sql后缀(完全可选,但建议)的备份文件。
默认情况下,mysqldump不会保存试图修改实际数据库存在的命令。相反,默认情况下,仅保存实际表(及其各自的数据),因此将为以后使用此文件导入做准备。如果您需要导出(然后重新创建)更多数据库的功能,请阅读官方文档中的--databases标志。
答案 1 :(得分:0)
只需尝试以下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);
答案 2 :(得分:0)
您可能需要为mysqldump.exe设置完整二进制路径的系统无法识别mysqldump命令
注意:在我的情况下,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);
?>