2013-07-11 99 views
0

我還是使用數據庫的新手,但是目前我正在使用mysql數據庫並試圖使我的bash腳本不可破解,因爲它可能會在多個不同的環境(dev,qa等)中使用。我知道如果沒有這一行,它會正常運行。創建表如果不存在懸掛

CREATE TABLE IF NOT EXISTS backupfiles (fileName VARCHAR(20), archiveId VARCHAR(500), checkSum VARCHAR(100), glacierVault VARCHAR(100), timeStamp date); 

我也知道,如果我把準確的行到我的數據庫時表不存在,那麼它運行完美,如果已經它存在它給了我一個警告,但不破。

+-------+------+------------------------------------+ 
| Level | Code | Message       | 
+-------+------+------------------------------------+ 
| Note | 1050 | Table 'backupfiles' already exists | 
+-------+------+------------------------------------+ 

當我運行上面的行並沒有它完美的作品表命名backupfiles,但是當有它掛起(當我說掛就坐在那裏,什麼都不做)的時候95%和5%的時間工作。有沒有人遇到這樣的問題?我使用AWS RDS(Amazon網絡serices關係數據庫服務)和MySQL服務器是5.5.27

這是我所有的代碼,我涉及到MySQL數據庫

mysql -h portal-rds -u $user --password=$mysqlpw <<QUERY_INPUT 
CREATE DATABASE IF NOT EXISTS $DATABASE; 
use glacier; 
CREATE TABLE IF NOT EXISTS backupfiles (fileName VARCHAR(20), archiveId VARCHAR(500), checkSum VARCHAR(100), glacierVault VARCHAR(100), timeStamp date); 
INSERT INTO backupfiles VALUES ('$archive_file_name', '$archiveID', '$CURRENTVAULT', '$checkSum', CURDATE()); 
COMMIT; 
QUERY_INPUT 

回答

0

到目前爲止,這是一個工作原型,看着改進它。現在如果其他人有這個問題

echo "CREATE DATABASE IF NOT EXISTS $DATABASE;" > /tmp/runthis.sql 
echo "use $DATABASE;" >> /tmp/runthis.sql 
SQLSTMT="SELECT COUNT(1) FROM information_schema.tables" 
SQLSTMT="${SQLSTMT} WHERE table_schema='${DATABASE}' AND table_name='backupfiles';" 
TABLE_EXISTS=`mysql -h portal-rds -u $user --password=$mysqlpw -ANe"${SQLSTMT}"` 
if [[ ${TABLE_EXISTS} -eq 0 ]]; then 
    SQLSTMT="CREATE TABLE backupfiles (fileName VARCHAR(20)," 
    SQLSTMT="${SQLSTMT} archiveId VARCHAR(500), checkSum VARCHAR(100)," 
    SQLSTMT="${SQLSTMT} glacierVault VARCHAR(100), timeStamp date);" 
    echo "${SQLSTMT}" >> /tmp/runthis.sql 
fi 
SQLSTMT="INSERT INTO backupfiles VALUES ('$archive_file_name'," 
SQLSTMT="${SQLSTMT} '$archiveID', '$CURRENTVAULT', '$checkSum', CURDATE());" 
echo "${SQLSTMT}" >> /tmp/runthis.sql 
echo "COMMIT;" >> /tmp/runthis.sql 
mysql -h portal-rds -u $user --password=$mysqlpw < /tmp/runthis.sql