2013-07-11 4 views
0

Я по-прежнему новичок в использовании баз данных, но в настоящее время я использую базу данных mysql и пытаюсь сделать мой сценарий bash нерушимым, потому что он может использоваться в нескольких разных средах (dev, qa и т. Д.). Я знаю, что он будет работать правильно без этой одной строки.Создать таблицу, если не существует Hanging

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 Web 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 
Смежные вопросы