簡體   English   中英

如何檢測 mysqldump 在 bash 腳本中是否失敗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM