在您的开发服务器上面里的dev5数据库设计、更改、与测试应用系统后,接下来的工作就是分发变更内容到下列两类数据库:
您的app5数据库。
您全部云客户的数据库。
分发过程必须遵循下列步骤进行:
锁住app5数据库。
锁住期间,不允许任何客户承租Section 17.2.4应用系统编号『5』。
开发者应执行这道指令,以锁住app5数据库:
wget -q --auth-no-challenge --http-user=john@example.biz --http-password=MyYyPPassSwwordD -O - https://www.terarows.com/pdbs/lock/5 |
或
curl -u john@example.biz:MyYyPPassSwwordD https://www.terarows.com/pdbs/lock/5 |
上述指令,如果执行成功,则回传Y;如果执行失败,则回传N。
在app5数据库以及每一个承租应用系统编号『5』的客户使用的数据库上面执行您的分发脚本。
开发者应执行这道指令,以下载你的app5以及您全部客户的服务器IP地址以及数据库名:
wget -q --auth-no-challenge --http-user=john@example.biz --http-password=MyYyPPassSwwordD -O /tmp/hosts.txt https://www.terarows.com/pdbs/hosts/5 |
或
curl -u john@example.biz:MyYyPPassSwwordD -o /tmp/hosts.txt https://www.terarows.com/pdbs/hosts/5 |
上述指令,如果执行成功,/tmp/hosts.txt有资料;如果执行失败,则没有/tmp/hosts.txt这个文档或该文档无内容。
假设/tmp/hosts.txt含有下面三个目标数据库:
192.168.1.200 app5 192.168.2.15 udb456 10.0.2.2 udb789 |
解锁app5。
解锁之后,重新开放客户承租Section 17.2.4应用系统编号『5』。
开发者应执行这道指令,以解锁app5数据库:
wget -q --auth-no-challenge --http-user=john@example.biz --http-password=MyYyPPassSwwordD -O - https://www.terarows.com/pdbs/unlock/5 |
或
curl -u john@example.biz:MyYyPPassSwwordD https://www.terarows.com/pdbs/unlock/5 |
上述指令,如果执行成功,则回传Y;如果执行失败,则回传N。
上述john@example.biz是您的电子邮件地址,MyYyPPassSwwordD是您在的登录密码。请以真实资料替换!
下面是完整的分发脚本例子。
在您当地机器里准备/tmp/patch-db.sql文档。它存放全部PostgreSQL指令,将在每一个目标数据库上面执行:
BEGIN; CREATE TABLE x_y_ ( c1 TEXT PRIMARY KEY, c2 INTEGER; ); COPY x_y_ FROM stdin; AA 1 BB 2 \. CREATE FUNCTION my_func(param TEXT) AS $$ BEGIN INSERT INTO x_y_ VALUES (param,3); END $$ LANGUAGE PLPGSQL VOLATILE; SELECT my_func('CC'); DROP TABLE x_y_; DROP FUNCTION my_func(); COMMIT; |
在您当地机器里准备/tmp/patch-db.sh这个文档。它存放下面内容:
#!/bin/bash APPLICATION=5 SQL_FILE=/tmp/patch-db.sql HOST_DB_FILE=/tmp/hosts.txt USER_PASSWORD=john@example.biz:MyYyPPassSwwordD URL_PREFIX=https://www.terarows.com/pdbs #Lock template database. RESULT=`curl -s -u $USER_PASSWORD $URL_PREFIX/lock/$APPLICATION` if [ "$RESULT" != "Y" ]; then echo "Failed to lock template database app${APPLICATION}." exit 1 fi function unlock_template_database { RESULT=`curl -s -u $USER_PASSWORD $URL_PREFIX/unlock/$APPLICATION` if [ "$RESULT" != "Y" ]; then echo "Failed to unlock template database. Customers can't subscribe application# $APPLICATION now!" fi } #Download list of target hosts and databases. rm -f $HOST_DB_FILE curl -s -u $USER_PASSWORD -o $HOST_DB_FILE $URL_PREFIX/hosts/$APPLICATION if [ ! -f "$HOST_DB_FILE" ]; then unlock_template_database echo "Failed to download list of target hosts and databases." exit 1 fi #Apply this patch on all target databases in all target servers. while read -a fields; do echo "===${fields[0]} ${fields[1]}===" cat $SQL_FILE | ssh dba@${fields[0]} "psql -U postgres --set AUTOCOMMIT=off --set ON_ERROR_STOP=on ${fields[1]}" if [ "$?" -ne 0 ]; then unlock_template_database exit 1 fi done < $HOST_DB_FILE unlock_template_database exit 0 |
在您当地机器里下chmod u+x /tmp/patch-db.sh这个指令,把该文档变成可执行档。然后下/tmp/patch-db.sh这个指令,执行这个模拟版的「分发设计变更内容」工作。