項目發布準備(freesbsd上postgres升級等一些準備)

來源:互聯網
上載者:User

0.刪除200伺服器setup資料庫中的不必要表和預存程序

DROP TABLE "sensorPressure";
DROP FUNCTION hex_to_int(text);
DROP FUNCTION "pressureDataToSensorPressure"();

 

1.備份200的setupd資料庫,:pg_dump -D -h localhost -U pgsql mydb(資料庫名稱) >  mydb.bak

2.還原setupdb到172的graindb  :psql -h localhost -U pgsql -d graindb < /home/mydev/project/setupdb.bak

    (遇到問題:提示 -d 選項無效  換用另外一個命令備份大資料庫,具體查看postgres文檔

     4.理大資料庫; 4.1輸出大資料庫; 因為 PostgreSQL 允許表的大小大於您的系統允許的最大檔案大小, 可能把錶轉儲到一個檔案會有問題,因為產生的檔案很可能比您的系統允許的最大檔案大。 因為 pg_dump 輸出到標準輸出,您可以用標準的 Unix 工具繞開這個問題: 使用壓縮的轉儲. 使用您熟悉的壓縮程式,比如說 gzip。 xiaop@xiaop-laptop:~$ pg_dump mydb(資料庫名) | gzip > mydbBACK.gz 4.2 恢複大資料庫; 用下面命令恢複: xiaop@xiaop-laptop:~$ createdb mydbNEW(新資料庫名) xiaop@xiaop-laptop:~$ gunzip -c mydbBACK.gz | psql mydbNEW 或者 xiaop@xiaop-laptop:~$ cat mydbBACK.gz | gunzip | psql mydbNEW

windows 下恢複postgres

D:/Program Files/PostgreSQL/8.3/bin>psql -U postgres -d setupdb < G:/setup_bak

 

 


3.檢查websetup觸發器,預存程序,建立代碼

 

4.使用websetup初始化graindb:paster setup-app development.ini
   4.1手動調用預存程序執行pressureData表到sensorPressure錶轉換


5.手工運行定時任務中的平均和擬合程式


6.使用172的graindb作為資料庫運行web伺服器快速測試全部功能

 

7.修改210伺服器grainrpc資料庫伺服器地址及資料庫名為172資料庫


8.再次檢查web伺服器是否獲得最新資料


9.運行定時任務使之成為背景程式

 

 

 

 

 

10.刪除freebsd上postgres8.3資料庫,從ports安裝8.4

  (遇到了點問題,參考文檔:http://www.cheeren.com/node/18)

  

唉。 升級...升級...升級...這一陣子一直升級,這次輪到PostgreSQL 大升級。升級...升級...升級...這一陣子一直升級,這次輪到PostgreSQL 大升級。 PostgreSQL 不像其它軟體,即使是8.2 升級到8.3,也必須大改,所以無法直接用upgrade 工具直接升。 PostgreSQL 不像其它軟體,即使是8.2 升級到8.3,也必須大改,所以無法直接用upgrade 工具直接升。 即使是Windows 版本,也必須勞心費力一番。即使是Windows 版本,也必須勞心費力一番。 這次我用FreeBSD 版本的升級做為例子,來說明最簡單也是最正確的大改版升級步驟。這次我用FreeBSD 版本的升級做為例子,來說明最簡單也是最正確的大改版升級步驟。 首先,請先把原本資料庫的資料完全備份下來。首先,請先把原本資料庫的資料完全備份下來。 如果你是Windows 的使用者或是Linux 的使用者,你可以考慮使用pgAdmin III 的「工具」選單中的「備份」或「備份全域」來做,這樣簡單很多,但是由於pgAdmin III 的說明太少,我實在看不懂「備份」對話方塊中選項的含意,所以乾脆不用。如果你是Windows 的使用者或是Linux 的使用者,你可以考慮使用pgAdmin III 的「工具」選單中的「備份」或「備份全域」來做,這樣簡單很多,但是由於pgAdmin III 的說明太少,我實在看不懂「備份」對話方塊中選項的含意,所以乾脆不用。 最正式的方法是使用在console 下的工具:pg_dump 和pg_dumpall。最正式的方法是使用在console 下的工具:pg_dump 和pg_dumpall。 兩者的差別在於,前者可以針對某個特定的database 做備份,而後者一般用來把整個伺服器資料做完整的備份。兩者的差別在於,前者可以針對某個特定的database 做備份,而後者一般用來把整個伺服器資料做完整的備份。 我建議直接使用pg_dumpall 比較方便和快速。我建議直接使用pg_dumpall 比較方便和快速。 方法如下:方法如下: $ pg_dumpall > filename $ pg_dumpall > filename 而filename你可以自己取,比如host_a.20080206.full.dump 之類的。而filename你可以自己取,比如host_a.20080206.full.dump之類的。 名稱中加入日期可以讓你更清楚知道這個備份檔備份的日期。名稱中加入日期可以讓你更清楚知道這個備份檔備份的日期。 加入full 字眼,可以提醒自己,這是完整備份,而非一般維護時所做的連續性部份備份的一份。加入full 字眼,可以提醒自己,這是完整備份,而非一般維護時所做的連續性部份備份的一份。 如果你所管理的PostgreSQL 有超過一台以上,那麼最好連資料庫主機名稱都註明。如果你所管理的PostgreSQL 有超過一台以上,那麼最好連資料庫主機名稱都註明。 對了,差點忘了一件極重要的事。對了,差點忘了一件極重要的事。 在Windows 上,只要你使用administrators 群組中的任何一位使用者登入,然後從開始功能表→PostgreSQL 8.3→Command Prompt,就可以打開「命令提示字元」,而且可以下達pg_dumpall 指令;但是,在FreeBSD,一般安裝時,預設root 是不允許執行PostgreSQL 的相關指令的,所以請先切換成pgsql 用戶,如果你沒更動pgsql 的密碼,那麼預設的密碼很「隨機」,也就是任你怎麼猜也都猜不出來,但是你可以先用su 切成root,再用su - pgsql 切換成pgsql 使用者,不用輸入任何密碼即可,這時就可以執行上述指令。在Windows 上,只要你使用administrators 群組中的任何一位使用者登入,然後從開始功能表→PostgreSQL 8.3→Command Prompt,就可以開啟「命令提示字元」,而且可以下達pg_dumpall 指令;但是,在FreeBSD,一般安裝時,預設root 是不允許執行PostgreSQL 的相關指令的,所以請先切換成pgsql 使用者,如果你沒更動pgsql 的密碼,那麼預設的密碼很「隨機」,也就是任你怎麼猜也都猜不出來,但是你可以先用su 切成root,再用su - pgsql 切換成pgsql 使用者,不用輸入任何密碼即可,這時就可以執行上述指令。 但是請注意,這時最好把這個備份檔移到安全位元置,以免繼續進行的安裝過程中不傎誤砍。但是請注意,這時最好把這個備份檔移到安全位元置,以免繼續進行的安裝過程中不傎誤砍。 所以這時候你最好是先跳回root,請下exit 指令,然後用cp 指令把剛才那個dump 檔copy 到任何你暫存的位置。所以這時候你最好是先跳回root,請下exit 指令,然後用cp 指令把剛才那個dump 檔copy 到任何你暫存的位置。 接著正式執行安裝。接著正式執行安裝。 在安裝新版本之前,必須先移除舊版本,否則兩個daemon 會搶同一個TCP port,開機時會有無法預知的狀況出現。在安裝新版本之前,必須先移除舊版本,否則兩個daemon 會搶同一個TCP port,開機時會有無法預知的狀況出現。 首先先看一下你的伺服器中,目前裝了哪些和PostgreSQL 相關的 package:首先先看一下你的伺服器中,目前裝了哪些和PostgreSQL 相關的 package: # pkg_info | grep postgresql # pkg_info | grep postgresql 這時候你至少可以看到兩個package 出現在清單中,而我多了一個:這時候你至少可以看到兩個package 出現在清單中,而我多了一個: postgresql-client-8.2.6_1 PostgreSQL database (client) postgresql-client-8.2.6_1 PostgreSQL database (client) postgresql-contrib-8.2.6 The contrib utilities from the PostgreSQL distribution postgresql-contrib-8.2.6 The contrib utilities from the PostgreSQL distribution postgresql-server-8.2.6 The most advanced open-source database available anywhere postgresql-server-8.2.6 The most advanced open-source database available anywhere 一般來說,如果你沒有安裝Server instrumentation 功能,那麼應該只有client 和server 兩個package。一般來說,如果你沒有安裝Server instrumentation 功能,那麼應該只有client 和server 兩個package。 但是這個小清單並不完整,如果你還有安裝php 和PostgreSQL 相關的驅動程式,那麼這時候並不會出現在這個清單當中。但是這個小清單並不完整,如果你還有安裝php 和PostgreSQL 相關的驅動程式,那麼這時候並不會出現在這個清單當中。 不用擔心,你若移除的順序不對,出現相依的套件,那麼把相依套件移除,再來移除目標套件即可。不用擔心,你若移除的順序不對,出現相依的套件,那麼把相依套件移除,再來移除目標套件即可。 只是這時候你最好拿隻筆記下你一共移除了哪些套件,將來才能再一一重新安裝回去。只是這時候你最好拿只筆記下你一共移除了哪些套件,將來才能再一一重新安裝回去。 我們先以這三個package 來說好了,如果你沒移除舊版本的server,那麼直接移除 client 會被提醒,而且停止進行安裝動作。我們先以這三個package 來說好了,如果你沒移除舊版本的server,那麼直接移除 client 會被提醒,而且停止進行安裝動作。 同樣的,如果你沒先移除舊版本的contrib 和php 相關package,你在移除client 時也會因為相依套件尚未被移除,而被停止移除client 的動作。同樣的,如果你沒先移除舊版本的contrib 和php 相關package,你在移除client 時也會因為相依套件尚未被移除,而被停止移除client 的動作。 所以若以上述三者為例,則移除的順序為:所以若以上述三者為例,則移除的順序為: # /usr/local/etc/rc.d/postgresql stop <-- 先停掉目前的PostgreSQL server # /usr/local/etc/rc.d/postgresql stop <-- 先停掉目前的PostgreSQL server # pkg_delete postgresql-contrib-8.2.6 # pkg_delete postgresql-contrib-8.2.6 # pkg_delete postgresql-server-8.2.6 # pkg_delete postgresql-server-8.2.6 # pkg_delete postgresql-client-8.2.6_1 # pkg_delete postgresql-client-8.2.6_1 這時請把/usr/local/pgsql/data 整個目錄移走,像我只是把它改個名稱,而讓它繼續留著,說不定哪天還會用到目錄中的某些檔案:mv /usr/local/pgsql/data /usr/local/pgsql/data_8.2。這時請把/usr/local/pgsql/data 整個目錄移走,像我只是把它改個名稱,而讓它繼續留著,說不定哪天還會用到目錄中的某些檔案:mv /usr /local/pgsql/data /usr/local/pgsql/data_8.2。 然後就可以開始使用port 來安裝PostgreSQL 8.3 了。然後就可以開始使用port 來安裝PostgreSQL 8.3 了。 在安裝前,請先確定你的伺服器上的port tree 是否已是最新的版本,如果你的port tree 是在2008/2/5 天亮前更新的,可能postgresql-server-8.3 還不是最新版本,請先手動更新 port tree。在安裝前,請先確定你的伺服器上的port tree 是否已是最新的版本,如果你的port tree 是在2008/2/5 天亮前更新的,可能postgresql-server-8.3 還不是最新版本,請先手動更新 port tree。 如果已是最新版本,那麼切到該port 目錄:如果已是最新版本,那麼切到該port 目錄: # cd /usr/ports/databases/postgresql83-server # cd /usr/ports/databases/postgresql83-server # make install clean # make install clean FreeBSD 會自動幫你將8.3 版的server 和client 都一併裝好。 FreeBSD 會自動幫你將8.3 版的server 和client 都一併裝好。 接著把contrib package 也裝起來:接著把contrib package 也裝起來: # cd ../postgresql-contrib # cd ../postgresql-contrib # make install clean # make install clean 如果你曾經把php5 的driver 移除掉或JDBC 等等等之前移除掉的套件,現在也請用同樣的方法把所有新的版本一一裝回去。如果你曾經把php5 的driver 移除掉或JDBC 等等等之前移除掉的套件,現在也請用同樣的方法把所有新的版本一一裝回去。 這樣就好了嗎。這樣就好了嗎。 還早,請先看一下你的/usr/local/pgsql 下是否已經建好新的資料庫。還早,請先看一下你的/usr/local/pgsql 下是否已經建好新的資料庫。 # ls /usr/local/pgsql # ls /usr/local/pgsql 如果這個目錄下只出現一個剛才更名的data_8.2,那麼代表Makefile 並沒有自動幫你做initdb,請執行:如果這個目錄下只出現一個剛才更名的data_8.2,那麼代表Makefile 並沒有自動幫你做initdb,請執行: # /usr/local/etc/rc.d/postgresql initdb [1] # /usr/local/etc/rc.d/postgresql initdb [1] 這時你再下ls /usr/local/pgsql 指令時,就可以看到多出一個data 目錄了,這樣才能正確啟動PostgreSQL:這時你再下ls /usr/local/pgsql 指令時,就可以看到多出一個data 目錄了,這樣才能正確啟動PostgreSQL: # /usr/local/etc/rc.d/postgresql start [2] # /usr/local/etc/rc.d/postgresql start [2] 如果沒出現任何錯誤訊息,那麼先恭喜你,安裝好了。如果沒出現任何錯誤訊息,那麼先恭喜你,安裝好了。 但是工作才完成一半,再來是把原來備份的資料回存回資料庫中:但是工作才完成一半,再來是把原來備份的資料回存回資料庫中: # su - pgsql # su - pgsql $ psql -f filename postgres $ psql -f filename postgres 也就是先切成pgsql 使用者,接著執行PostgreSQL 的互動式指令輸入工具:psql,然後把剛才你的dump 檔的名稱(這裏當然是完整路徑名稱)取代上面的filename 。也就是先切成pgsql使用者,接著執行PostgreSQL的互動式指令輸入工具:psql,然後把剛才你的dump檔的名稱(這裡當然是完整路徑名稱)取代上面的filename 。 接著一些訊息代表著資料庫回存的動作,正在做什麼動作。接著一些訊息代表著資料庫回存的動作,正在做什麼動作。 如果一切錯誤訊息都沒有出現過,那麼恭喜你,工作完成了80%。如果一切錯誤訊息都沒有出現過,那麼恭喜你,工作完成了80%。 對於Windows 的使用者來說,只要記住最後一條指令,就可以把剛才pg_dumpall 所備份的資料回存了。對於Windows 的使用者來說,只要記住最後一條指令,就可以把剛才pg_dumpall 所備份的資料回存了。 Windows 的使用者真幸福。 Windows 的使用者真幸福。 什麼。什麼。 才完成80%。才完成80%。 是的,有兩個檔可能之前的版本你有更動過,分別是postgresql.conf 和pg_hba.conf,它們在FreeBSD 中應該位於/usr/local/pgsql/data 目錄下,請把之前曾經更動過的改回去,但是請把release notes 先讀過一遍,因為postgresql.conf 中很多管理項目都更動過了,可能之前你所更改的項目,8.3 版已經把該項和其它項目合併,並取了新的項目名稱了,先讀過release notes 的E.1.2.2. Configuration Parameters 是很重要的。是的,有兩個檔可能之前的版本你有更動過,分別是postgresql.conf 和pg_hba.conf,它們在FreeBSD 中應該位於/usr/local/pgsql/data 目錄下,請把之前曾經更動過的改回去,但是請把release notes 先讀過一遍,因為postgresql.conf 中很多管理項目都更動過了,可能之前你所更改的項目,8.3 版已經把該項和其它項目合并,並取了新的項目名稱了,先讀過release notes 的E.1.2.2. Configuration Parameters 是很重要的。 還有,剛才如果把舊的8.2 版的 /usr/local/pgsql/data 目錄直接刪掉,那此刻就糗了,你必須用你的記憶力回想你曾經更動過的項目和內容,所以我才會建議只需把它更名,保留下來。還有,剛才如果把舊的8.2 版的 /usr/local/pgsql/data 目錄直接刪掉,那此刻就糗了,你必須用你的記憶力回想你曾經更動過的項目和內容,所以我才會建議只需把它更名,保留下來。 若是你對PostgreSQL 的備份和回存有興趣,英文程式也還可以,那麼請進一步參考PostgreSQL 的線上說明: Chapter 24. Backup and Restore 。若是你對PostgreSQL的備份和回存有興趣,英文程式也還可以,那麼請進一步參考PostgreSQL的線上說明: Chapter 24. Backup and Restore 。 附註:附註: [1] 當然囉,如果新的data 目錄已經產生,也就是Makefile 已經自動幫你執行initdb 的動作了,那麼initdb 這個動作就可以省了。 [1] 當然囉,如果新的data 目錄已經產生,也就是Makefile 已經自動幫你執行initdb 的動作了,那麼initdb 這個動作就可以省了。 我會特別這樣提的原因是,我現這兩天的搶先版本的Makefile 怪怪的,有時不會自動執行initdb 動作。我會特別這樣提的原因是,我現這兩天的搶先版本的Makefile 怪怪的,有時不會自動執行initdb 動作。 [2] 如果你沒有像我這麼麻煩的用pg_dumpall 和psql 來備份回存,直接升級(還是得先移除舊版本再安裝新版本),表面上看起來還是可以升級,但是,事實上Makefile 會把你舊版本的postgresql.conf 和pg_hba.conf 複製一份到新的data 目錄中。 [2] 如果你沒有像我這麼麻煩的用pg_dumpall 和psql 來備份回存,直接升級(還是得先移除舊版本再安裝新版本),表面上看起來還是可以升級,但是,事實上Makefile 會把你舊版本的postgresql.conf 和pg_hba.conf 複製一份到新的data 目錄中。 如我文中所說的,postgresql.conf 在這個版本中有大更動,因此,當你打算啟動資料庫時,會出現FATAL ERROR。如我文中所說的,postgresql.conf 在這個版本中有大更動,因此,當你打算啟動資料庫時,會出現FATAL ERROR。 解決方法很簡單,用不著重灌,把新的data 目錄移走(一樣用更名的),執行/usr/local/etc/postgresql initdb,重做一次initdb,就會有一個全新版本的data 了。解決方案很簡單,用不著重灌,把新的data 目錄移走(一樣用更名的),執行/usr/local/etc/postgresql initdb,重做一次initdb,就會有一個全新版本的data 了。 [3] 這篇文章僅適用於負載不大的伺服器上,倘若你的伺服器是mission critical 的大用量伺服器,雖然基本的升級概念是一樣的,也就是資料庫大升級等同重新安裝,所以服務勢必一定得中斷,但是事前的演練和良好的計劃,可以讓停機服務的時間減少。 [3] 這篇文章僅適用於負載不大的伺服器上,倘若你的伺服器是mission critical 的大用量伺服器,雖然基本的升級概念是一樣的,也就是資料庫大升級等同重新安裝,所以服務勢必一定得中斷,但是事前的演練和良好的計劃,可以讓停機服務的時間減少。 在這種情況,建議必須得增加備援伺服器,在主伺服器升級的同時,讓備援伺服器先暫時服務。在這種情況,建議必須得增加備援伺服器,在主伺服器升級的同時,讓備援伺服器先暫時服務。 說到這裏,就得牽涉到「資料庫複製」(replication) 的主題了。說到這裡,就得牽涉到「資料庫複製」(replication) 的主題了。 等我有空再來寫一篇PostgreSQL 和replication 相關的文章。等我有空再來寫一篇PostgreSQL 和replication 相關的文章。

 


11.將172Database Backup,還原到210上
   11.1檢查是否有8.3的bug
12修改210伺服器grainrpc資料庫伺服器地址及資料庫名210資料庫

0.刪除/home/ftpuser/upload中以存在的setupdb.bak
1.進入210伺服器/home/ftpuser/upload備份資料庫 pg_dump -D -h localhost -U pgsql setupdb >  setupdb.bak
2.使用ftp工具下載儲存到project目錄下
3.在172上建立graindb資料庫
   還原到172伺服器 psql -h localhost -U pgsql -d graindb < /home/mydev/project/setupdb.bak

 

最後檢測資料是否正常

 

   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.