到目前为止我已经通过以下方式创建并压缩了 mysql 转储:
mysqldump -u root -p --all-databases > /var/www/html/db-$(date +\%F-\%T).sql
zip /var/www/html/db-$(date +\%F-\%T).zip /var/www/html/db-*.sql
rm /var/www/html/db-*.sql
有没有办法直接将其压缩mysqldump
并保存这额外的两行?
答案1
尝试这个:
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip
您将只有一个文件进入 zip 存档,其中包含-作为文件名。
答案2
另外两个答案已经陈述了以下解决方案(因此将其视为另外两个答案的扩展):
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip -
这很好,但这只适用于 stdin/stdout。这意味着文件将存储在-
档案中,并且只能通常情况下可以合理地提取到 stdin。这意味着要从 ZIP 中实际提取这些数据,您必须执行以下操作:
unzip -p myZipFile.zip > myBackup.sql
如果你想制作一个“普通”的 ZIP 文件(其中的内容有真实的名字),你必须这样做一些非常复杂的事情或者只做你已经在做的事情,这样就没有净收益。
由于 MySQL 本身支持 stdin,您可以使用以下命令直接从备份中恢复(作为示例):
unzip -p myDataBackup.zip | mysql -uroot -pMyInsecurePassword
答案3
你可以尝试一下
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip -
答案4
对于 Ubuntu20,zip 和 /var 之间需要在“>”符号。
mysqldump -u root -p --all-databases | zip > /var/www/html/db-$(date +\%F_%H-%M-%S).zip