Tente isto:
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip
Você só terá um arquivo no arquivo zip com - como nome do arquivo.
Até agora eu criei e zipi o mysql lixeira desta maneira:
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
Existe uma maneira de tê-lo zipado diretamente de mysqldump
e salvar essas duas linhas extras?
Tente isto:
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip
Você só terá um arquivo no arquivo zip com - como nome do arquivo.
As outras duas respostas já declararam a seguinte solução (então considere isto uma extensão das outras duas respostas):
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip -
Isso é bom, mas isso funciona apenas no stdin / stdout. Isso significa que o arquivo será armazenado como -
dentro do arquivo, e somente normalmente será extraído corretamente para stdin. Isso significa extrair esses dados do ZIP, você terá que fazer isso:
unzip -p myZipFile.zip > myBackup.sql
Se você quiser criar um arquivo ZIP "normal" (onde as coisas têm um nome real), você terá que fazer algumas coisas realmente complicadas ou apenas faça o que você já está fazendo, então não há ganho líquido.
Como o próprio MySQL é stdin-aware, você pode restaurar diretamente de um backup usando o comando abaixo (como um exemplo):
unzip -p myDataBackup.zip | mysql -uroot -pMyInsecurePassword
Você pode tentar isso
mysqldump -u root -p --all-databases | zip /var/www/html/db-$(date +\%F-\%T).zip -