До сих пор я создавал и архивировал дампы 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
и сохранить эти 2 дополнительные строки?
Попробуйте:
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip
У вас будет только один файл в zip-архиве с именем файла - .
В двух других ответах уже указано следующее решение (поэтому рассмотрим это как продолжение двух других ответов):
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
Вы можете попробовать это
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip -