Я пытаюсь сделать резервную копию по нажатию кнопки, используя следующий код, при каждом нажатии я получаю пустую базу данных. Я перепробовал все статьи, но результат тот же. Может ли кто-нибудь помочь мне решить эту проблему.
<?php
ob_start();
$username = "root";
$password = "";
$hostname = "localhost";
$dbname = "cars";
$command = "D:\\..\\wamp64\\bin\\mysqldump --add-drop-table host=$hostname
--user=$username ";
if ($password)
$command.= "--password=". $password ." ";
$command.= $dbname;
system($command);
$dump = ob_get_contents();
ob_end_clean();
// send dump file to the output
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" .
date("Y-m-d_H-i-s").".sql"));
flush();
echo $dump;
exit();
?>
Я собирался пройтись по вашему коду, но подумал, что могу просто дать вам тот, который я сделал ранее с одного из моих сайтов, так как он идентичен тому, что вы просили. Я могу сразу сказать вам, что причина, по которой ваша БД очищалась при щелчке, заключается в том, что вы отбрасывали базу данных в вашей команде exec, используя --add-drop-table
:
Как удалить и повторно заполнить базы данных MySQL?
Это код, извлеченный с одного из моих бэкэндовых сайтов администраторов, для создания случайных дампов и резервных копий MySQL через broswer, когда это необходимо. Это очень просто, но чрезвычайно эффективно, если обеспечено должным образом. Форма устанавливается с помощью переключателей для загрузки или резервного копирования, а затем выполняет локальный mysqldump из cmdline. Резервное копирование будет выводиться, если это было успешно, путем тестирования, чтобы увидеть, действительно ли файл был заархивирован, и загрузка загрузит файл, который в значительной степени собран, используя пример с сайта PHP Вот. Я немного изменил его, чтобы вы могли добавить его в свой проект
<?php$username = "root";
$password = "root";
$host = "localhost";
$dbname = "new";
$path = "/Applications/MAMP/htdocs/html/test123.sql";
$backup = exec('/Applications/MAMP/Library/bin/mysqldump --user=' . $username . ' --password='. $password .' --host=' . $host . ' ' . $dbname . ' > ' . $path . '');
if (isset($_POST['backup'])) {
if (file_exists($path)) {
echo "Backup Success";
echo "<br>";
} else {
echo "Backup failed!";
echo "<br>";
echo "Backup of " . $dbname . " does not exist in " . $path;
}
}
if (isset($_POST['download'])) {
if (file_exists($path)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($path).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($path)); //Whoops...Forgot to change variable!
readfile($path); //Whoops...Forgot to change variable!
exit;
} else {
echo "File does not exist!";
}}
?><!DOCTYPE html>
<html>
<head>
<title>Backup Page</title>
</head>
<body>
<form method="post">
<input type="radio" name="backup"> Backup <br>
<input type="radio" name="download"> Download <br>
<input type="submit" value="MySQL Backup">
</form>
</body>
</html>
Других решений пока нет …