mysql - 如果不存在则创建表挂起

标签 mysql bash amazon-web-services create-table

我对使用数据库还是个新手,但目前我正在使用 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 Web服务关系数据库服务),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

最佳答案

到目前为止,这是一个工作原型(prototype),正在考虑改进它。现在如果其他人有这个问题

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

关于mysql - 如果不存在则创建表挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599970/

相关文章:

node.js - WebSocket 在本地、AWS 上工作,但在阿里巴巴云上不工作

amazon-web-services - AWS Cognito - 帮助理解经过身份验证和未经身份验证的访问

python - 有没有一种方法可以在不对组内的主机进行排序的情况下对 ansible 主机文件中的组进行排序?

java - 如何在MySQL中存储时间

mysql - 基于日期的最后连续插入记录的计数

php - mysql case语句

bash - 如何使用 curl 将收到的 cookie 信息打印到标准输出?

linux - 从 linux shell 脚本中的文件中删除 grep 搜索内容

amazon-web-services - AWS缓冲区在流传输到Lambda之前先登录CloudWatch

java - Hibernate 和 JPA 引发意外查询