Scripting
gzip, 發送到伺服器, ungzip
我正在編寫一個腳本來備份和 gzip 一組 MySQL 表,將它們 scp/ssh 到不同的伺服器,然後將它們解壓縮目前腳本是:
#!/bin/bash DATE=`date +"%d_%b_%Y_%H%M"` BACKUP_DIR=/mnt/data/backups/saturday/ echo Creating new directory /mnt/data/backups/saturday/fathom_$DATE sudo mkdir /mnt/data/backups/saturday/fathom_$DATE sudo chmod 777 /mnt/data/backups/saturday/fathom_$DATE mysqldump pacific_fathom user_types > /mnt/data/backups/saturday/fathom_$DATE/user_types.sql echo Dumping users ... mysqldump pacific_fathom users > /mnt/data/backups/saturday/fathom_$DATE/users.sql echo Dumping users_roles ... mysqldump pacific_fathom users_roles > /mnt/data/backups/saturday/fathom_$DATE/users_roles.sql tar -zvcpf $BACKUP_DIR/PlatformDB-$DATE.tar.gz /mnt/data/backups/saturday/fathom_* | ssh root@xx.xx.xx.xx 'tar -xzf - -C /mnt/data/backups/saturday' echo Finished!
備份有效,它會壓縮文件,但它告訴我它有錯誤
gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now
它創建的輸出文件是
PlatformDB-22_Jul_2021_1553.tar.gz
它永遠不會移動到 ssh 部分(最後在遠端伺服器中檢查並且那裡沒有登錄)所以我對為什麼會收到這個錯誤有點困惑。它創建的 tar.gz 文件可以使用
tar -xzf - -C /mnt/data/backups/saturday
腳本的一部分進行解包。我必須-
用文件名替換。我不認為這會對腳本產生影響。這在自動化環境中也行不通。任何幫助將不勝感激!!!
該命令
tar -zvcpf ...$DATE.tar.gz /mnt/data/backups/saturday/fathom_*
將 gzip 後的備份寫入$DATE.tar.gz
並輸出備份的文件列表。然後將此文件列表通過管道傳輸到
ssh root@xx.xx.xx.xx 'tar -xzf - ...
. 顯然,文件列表不是 gzip 格式的,這會導致錯誤。解決方案:將內容髮送
$DATE.tar.gz
到 ssh 命令。例如先創建本地備份文件,然後cat $DATE.tar.gz | ssh ...
. 或者,如果您不需要本地備份文件,請在標準輸出上創建備份:tar -zvcpf - /mnt/data/backups/saturday/fathom_* | ssh ...
您還可以嘗試該
tee
命令並將備份寫入標準輸出和本地文件:tar -zvcpf - /mnt/data/backups/saturday/fathom_* | tee $DATE.tar.gz | ssh ...
作為與這個問題無關的旁注,我只是注意到 tar 在將存檔寫入文件時將文件列表寫入stdout,而在將存檔寫入stdout時將文件列表寫入stderr。聰明的!