php mysqldump和zip 7z

Gra*_*per 2 php mysqldump windows-7

我有这行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";
Run Code Online (Sandbox Code Playgroud)

但我宁愿让.zql文件用7zip压缩(作为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";
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Clu*_*Ace 8

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

请注意,从Windows命令终端执行以下命令,即Start-> Run-> cmd

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

mysqldump -u<mysqlUserName> -p<mysqlPassword> <schemaName>|7z.exe a -si<nameInZip> <zippedPathAndName.7z> 
Run Code Online (Sandbox Code Playgroud)

这将创建mysqldump的.7z文件.[ - si]开关指定从StdIn获取输入."nameInZip"就是您想要在zip文件中出现的内容; 我做了我的"schemaName".sql.

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

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

schtasks /create /sc DAILY /tn <yourTaskName> /ru System /tr <pathToYourBatchFile> /st 20:45
Run Code Online (Sandbox Code Playgroud)

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

请参阅此处以获取schtasks命令的良好参考.

希望这可以帮助!