3

我有这行 php 备份我的数据库,工作就像一个魅力(Windows 7):

$exec_str = "{$real_path}Bin\mysqldump -h {$mysql_db_host} -u {$mysql_db_user} -p{$mysql_db_pasw} {$db_name} > {$backupdir}\\{$db_name}.sql";

但我宁愿使用 7zip 压缩 .sql 文件(如 7z)

这个不起作用(7za.exe 的路径是正确的)而是生成空的 7z 文件:

$exec_str = "{$real_path}Bin\mysqldump -h {$mysql_db_host} -u {$mysql_db_user} -p{$mysql_db_pasw} {$db_name} | {$real_path}7za a > {$backupdir}\\{$db_name}.sql.7z";

我究竟做错了什么?

4

1 回答 1

13

我成功地使用 7z 压缩了 mysqldump (Windows Server 2008 R2) 的输出,但我使用了命令行批处理文件和自动化任务。另外,我只使用了 7z.exe,而不是 7za。

注意以下命令是从 Windows 命令终端执行的,即开始->运行-> cmd

我为自动化任务创建了一个批处理文件,以使用以下内容运行:

mysqldump -u<mysqlUserName> -p<mysqlPassword> <schemaName>|7z.exe a -si<nameInZip> <zippedPathAndName.7z> 

这将创建一个 .7z 的 mysqldump 文件。[-si] 开关指定从 StdIn 获取输入。“nameInZip”正是您希望出现在 zip 文件中的内容;我做了我的“schemaName”.sql。

注意:这假定 mysqldump 和 7z 可执行目录位于 %PATH% 环境变量中。否则使用二进制文件的完整路径,例如 c:\program files\7-zip\7z.exe 而不是 7z.exe

然后我创建了一个自动化任务:

schtasks /create /sc DAILY /tn <yourTaskName> /ru System /tr <pathToYourBatchFile> /st 20:45

这将创建一个自动任务,每天 20:45 运行您的批处理文件。请注意“/ru System”开关,它确保命令由 SYSTEM 运行,并且无论您是否登录都将运行。

有关 schtasks 命令的良好参考,请参见此处

希望这可以帮助!

于 2012-10-24T13:29:14.090 回答