2012-08-17 24 views
9

Tôi muốn tạo bản sao lưu từ cơ sở dữ liệu, nhưng tôi chỉ nhận được một tệp trống.php exec() - mysqldump tạo một tệp trống

include('config.php'); 

$command = "mysqldump --opt -h ".$_host." -u ".$_user." -p ".$_pass." ".$_db." > test.sql"; 
exec($command); 

echo "<br />".$command; 

test.sql được tạo nơi tệp .php được đặt.

Edit:

Lưu ý! Tôi đang sử dụng XAMPP WINDOWS!

Giải pháp:

Bởi vì tôi đang sử dụng Windows Web Server (XAMPP), tôi cần phải chỉ định đường dẫn:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql'; 
  1. tôi loại bỏ các khoảng trống giữa -p và vượt qua. Dường như: -pMYPASSWORD
  2. thay thế " với '

Tôi nghĩ rằng nếu bạn đang sử dụng một máy chủ web dựa trên Linux, bạn không cần phải chỉ định đường dẫn cho mysqldump.

Chúc mừng! :-)

+4

Tôi nghĩ bạn nên xóa khoảng cách giữa -p và mật khẩu. –

+0

Vẫn nhận được tệp trống. –

+2

Bạn đã cố gắng echo-ing ra lệnh (để đảm bảo tất cả các biến được thông qua như mong đợi) hoặc thử nghiệm nó bằng tay với đầu vào bên phải? – Fluffeh

Trả lời

0

Bạn nên xóa khoảng cách giữa -p và mật khẩu.

--opt không cần thiết với các phiên bản gần đây của mysql.

Ngoài ra, cú pháp của bạn là chính xác để nếu nó không hoạt động với sửa lỗi -p, bạn nên kiểm tra các tham số và lệnh được tạo.

4

Đây là những thông số

-uROOT -pPASSWORD --databases DB --result-file = FILE.SQL

+0

cho -u, bạn có thể có một không gian. –

+0

test.sql vẫn còn 0 kb. –

0

Nếu bạn nhìn vào hướng dẫn cho exec đầu ra đi vào một mảng đó là đối số thứ hai. Đó có thể là nguồn gốc của vấn đề.

0

Lấy biến số ra khỏi dấu ngoặc kép và xóa --opt.

Ngoài ra hãy chắc chắn rằng bạn đang gặp tên tập tin độc đáo

$backupfile = $dbname . date("Y-m-d-H-i-s") . '.sql';

$command = "D:\xampp\mysql\bin\mysqldump -u $_user -p$_pass $_db > $backupfile";

system($command);

3

Hãy thử điều này một:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql 2>&1'; 

-its về phép vấn đề.

+2

2> & 1 cuối cùng đã giúp tôi ít nhất bị lỗi thay vì tệp trống. –

0

Đối với những người trên máy Mac

tôi đã chiến đấu với vấn đề này toàn bộ buổi tối ngày hôm nay. Sai lầm ngớ ngẩn: người ta cần phải chmod các thư mục mà bạn đang bán phá giá các tập tin.

Tôi chạy này mà cố định vấn đề:

chmod -R 777 your_dump_directory/ 
0

Hãy thử điều này:

$DBUSER="user"; 
$DBPASSWD="password"; 
$DATABASE="DBname"; 

$filename = "backup-" . date("d-m-Y") . ".sql"; 

$command = '"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" '.$DATABASE ." -u".$DBUSER ." -p".$DBPASSWD." > your_web_site/$filename"; 
passthru($command); 
  • Thay đổi con đường sự chỉ đạo của các ứng dụng mysqldump.exe của máy tính của bạn.
  • Tôn trọng "" bên trong lệnh.

Sau đó buộc việc tải tập tin:

if (file_exists("your_web_site/".$filename)) { 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename="'.basename($filename).'"'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
readfile("your_web_site/".$filename); 
exit; 
} 

Chỉnh sửa: Bạn phải từ bỏ quyền truy cập vào thư mục mà bạn giữ bản sao.