[英]How can I detect if mysqldump fails in a bash script?
我有一個小而骯臟的腳本來每晚轉儲所有客戶數據庫中的一個表:
#!/bin/bash
DB_BACKUP="/backups/mysql_backup/`date +%Y-%m-%d`"
DB_USER="dbuser"
DB_PASSWD="dbpass"
# Create the backup directory
mkdir -p $DB_BACKUP
# Remove backups older than 10 days
find /backups/mysql_backup/ -maxdepth 1 -type d -mtime +10 -exec rm -rf {} \;
# Backup each database on the system
for db in $(mysql --user=$DB_USER --password=$DB_PASSWD -e 'show databases' -s --skip-column-names|grep -viE '(staging|performance_schema|information_schema)');
do echo "dumping $db-uploads"; mysqldump --user=$DB_USER --password=$DB_PASSWD --events --opt --single-transaction $db uploads > "$DB_BACKUP/mysqldump-$db-uploads-$(date +%Y-%m-%d).sql";
done
最近我們遇到了一些表損壞的問題,mysqldump 失敗並顯示以下消息:
mysqldump: Got error: 145: Table './myDBname/myTable1' is marked as crashed and should be repaired when using LOCK TABLES
有沒有辦法讓我檢查 bash 腳本中是否發生這種情況,如果是,則記錄錯誤?
另外,這樣的錯誤會停止腳本,還是會繼續正常備份數據庫的 rest? 如果它會停止執行,有沒有辦法解決這個問題?
每個程序都有一個退出狀態。 每個程序的退出狀態分配給$?
內置 bash 變量。 按照慣例,如果命令成功,則為 0,如果命令不成功,則為 1-255。 確切的值取決於該程序中的代碼。
您可以在此處查看 mysqldump 可能發出的退出代碼: https://github.com/mysql/mysql-server/blob/8.0/client/mysqldump.cc#L65-L72
您可以檢查並記錄它, output 您選擇的錯誤消息,退出 bash 腳本,無論您想要什么。
mysqldump ...
if [[ $? != 0 ]] ; then
...do something...
fi
你也可以寫這個做同樣的事情:
mysqldump ... || {
...do something...
}
||
表示如果前面命令的退出狀態為非零,則執行后面的語句或代碼塊。
默認情況下,返回錯誤的命令不會導致 bash 腳本退出。 您可以選擇使用此語句使腳本的行為成為腳本的行為,並且所有以下命令如果失敗將導致腳本退出:
set -e
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.