遷移Moodle

出自MoodleDocs
跳到:導覽、​搜尋

有時需要將Moodle站點從一個伺服器移動到另一個伺服器。例如,把Moodle站點從虛擬主機移至獨立主機。

提示:常見的升級錯誤是忘記更新遷移後的config.php文件。

遷移一個完整的Moodle站點——方法1

此方法涉及到將整個站點從一個伺服器遷移至另一個伺服器。如需將域名/IP位址變更為新伺服器的地址,還需如下幾步:

  • 維護模式。置於當前Moodle站點為CLI維護模式以防止數據庫任何數據的增加。因管理員帳號不受維護模式設置的影響,遷移期間也不要他們登錄。
  • 備份當前數據庫。遵循Moodle升級站點備份的說明文檔即可備份數據庫。包含mysql轉儲(dump)過程的文本文件即可以找到。
  • 複製Moodle軟件。需要複製Moodle源碼到新伺服器——如可以升級到最新版本的話,儘量升級。
  • 變更$CFG->wwwroot参数。在(可能是)新的Moodle目錄下,為新伺服器的config.php文件變更$CFG->wwwroot的參數。
  • 複製數據目錄內容(moodledata)。複製數據目錄的內容到新伺服器(檢查$CFG->dataroot的值)。
  • 覆審moodledata的權限。檢查數據目錄權限是否與之前的保持一致,如若在新伺服器變更了位置還需更改數據目錄的值(config.php內的moodledata位置)。
  • 變更Moodle的URL地址。如若需用一個新的URL,還需為新伺服器在數據庫里變更URL。此URL連結的圖片、文件等以絕對路徑存儲於數據庫,而且他們參考旧的$CFG->wwwroot值。所以當加載舊數據庫伺服器備份的絕對連結是到新伺服器時,連結會崩潰的。這有2種方法可以解決這個問題:
  1. 第一種方法是站點正常運行時且在備份數據庫之前使用腳本replace.php進行變更URL。將瀏覽器指向yourserver.com/admin/tool/replace/index.php或舊版本的http://yourserver.com/admin/replace.php
    • 分別輸入新(http://newserver.com)舊(http://oldserver.com)伺服器的URL,它將會修複數據庫表內的URL。還需要通過重啟瀏覽器清除任何緩存連結。現在,重新備份一遍數據庫——此次將會含有正確的URL地址。
    1. 第二種方法是先備份數據庫,然後通過文本編輯器(或使用Unix工具,如,sed)的搜索和替換功能,用新的URL替換掉備份文件內的舊的URL。如下為sed的代碼示例:
      • #sed -e 's/oldserver.com/newserver.com/g' oldmysqldump.sql > newmysqldump.sql
    1. 注意:第二種方法並不能替換掉版塊內的文本,因其是以base64的編碼方式存儲與數據庫內,所以版塊內的任何連結都得不到修復。所以如若使用第二種方法則需在遷移之後考慮使用替換工具進行再次修復。
      提示::可能需要檢查數據庫轉儲文件(mysqldump)以查明舊伺服器是如何被引用的。
      變更URL之後還需還原數據庫。

    遷移一個完整的Moodle站點——方法2

    新舊伺服器上是否均有Shelle訪問權限?如若有的話,下面是遷移基於Unix的站點非常快速且高效的方法。

    同時此方法也適用於創建快照或測試站點。

    • 伺服器上建立一個空的數據庫
    • 置於當前站點為維護模式
      • 登錄伺服器的Shell
      • 使用rsync命令複製moodledatapublic_html(或為Moodle安裝目錄下的任何目錄)到新伺服器——為每個目錄執行如下命令(用詳細資料替換掉大寫字母(caps);SOURCE=複製目的地的目錄):
        • rsync -av -e ssh SOURCE/ USERNAME@NEW_SERVER.COM:/PATH/TO/DESTINATION/
      • 通過執行如下命令將轉儲的數據庫文件導入到新伺服器的數據庫中:
        • mysqldump --allow-keywords --opt -uMySQL_USERNAME -pPASSWORD DATABASE | ssh USER@DOMAIN "mysql -uMySQL_USERNAME -pPASSWORD DATABASE"
      • 新伺服器上,用相應的詳細資料更新config.php
      • 登錄到新伺服器的「新」Moodle安裝程序中,通過管理員的搜索和替換工具,使用新的URL搜索並替換掉舊的URL,如此即可修復內部連結地址
      • 確保一切順利

    這大約需要15分鐘。

    當一切運轉正常時,根據需要設置重定向或變更DNS,關閉新站點的維護模式並「關閉」舊的站點。

    其他需要考慮的要點

    圖片連結地址仍為舊站點的地址,需要將其變更為新站點

    如若之前的Moodle伺服器使用http//192.168.0.1/Moodle作為站點URL。那麼需要設置站點為http://OurMoodle.org/Moodle。雖然已經將配置文件內的URL變更為新地址,但是圖片連結仍指向舊站點。

    一個簡單且快速的解決方案是使用Moodle的替代腳本來修復這個問題。以管理員登錄系統,在瀏覽器地址欄輸入http://OurMoodle.org/admin/tool/replace/index.php(舊版本則輸入or http://OurMoodle.com/admin/replace.php)。使用本頁面內的2個表單將舊地址http://192.168.0.1/ 變更為新地址 http://OurMoodle.org/

    此功能僅適用於運行MySQL或Postgre數據庫的Moodle站點。參閱[https://tracker.moodle.org/browse/MDL-26597 MDL-26597]和[https://tracker.moodle.org/browse/MDL-35099 MDL-35099]。

    Moodle升級

    遷移Moodle的同時將其升級為最新版本是一個不錯的主意。如果伺服器是自己的,遵循Moodle升級說明文檔,或者先核驗一下伺服器是否支持Moodle的升級。

    伺服器之間還原單個課程

    可能需要把單個課程從舊站點還原到新站點,尤其是在測試遷移工作的時候。在還原備份文件到另一個伺服器上時要比創建備份更容易損壞文件的絕對參考連結(When restoring a Moodle backup file to Moodle on a different server than the one used to create the backup, the absolute referenced links to files maybe broken)。修復這個問題可以通過打開backup-coursename.zip文件,編輯moodle.xml文件,並用$@FILEPHP@$替代文件內的連結。

    例如,用$@FILEPHP@$替換連結http://yourserver.com/file.php/243/

    文件還原之後,新課程將使用正確的文件路徑。

    變更DNS&IP偽裝

    可能還需要變更新站點的DNS條目。如若已經變更完了,需要花費一定的時間去複製,所以要耐心等待。如果伺服器放置在防火牆之後,可能還需要變更防火牆規則以使新伺服器可正常訪問。參閱IP偽裝文檔。

    You may have had to change the DNS entries for the new Moodle site. If you have done so, it will take some time for the changes to replicate, so be patient. If your server is located behind a firewall, you may also have to change your firewall rules to allow access to the new server. See the masquerading docs.

    內部和外部的訪問

    如若設置站點為可通過內網和外網均可訪問,確保已經核驗過新站點內外網絡均可訪問。

    另請參閱

    使用Moodle論壇中的討論:

    </div></div></div>