在您的開發主機上面裏的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這個指令,執行這個模擬版的「分發設計變更內容」工作。