喬顯亮
文章編號:1672-5913(2009)10-0180-02
摘要:Moodle平臺作為一個優秀的開放式網絡課程管理系統,可以方便地用來構建網絡課程。本文主要論述了Moodle課程遷移到新的服務器后,由于服務器IP地址的改變而造成課程資源中部分鏈接失效的問題,分析了問題產生的原因,并找出了解決方案。
關鍵詞:Moodle;課程;Mysql;遷移
中圖分類號:G642
文獻標識碼:A
Moodle是Modular Object-Oriented Dynamic Learning Environment(模塊化面向對象的動態學習環境)的縮寫,是專門針對廣大教師在信息化環境中設計、管理、實施和評價自己的課程與教學而開發的課程管理系統。Moodle自誕生之日起就以自由軟件的形式出現,遵循GPL(GNU Public License)協議,這使它充滿了無窮的活力,吸引了一大批開發者和使用者,目前主流版本是1.9版。
1Moodle數據遷移中存在的問題
Moodle可以運行在Windows環境下,首次使用需要安裝,安裝成功后,系統會生成一個名為config.php的文件,內含服務器的配置信息。如果要把Moodle整體遷移到另外一臺服務器上,只要拷貝整個Moodle文件夾到新服務器上,并把config.php文件中wwwroot項對應的IP地址改為新服務器的IP地址,就可以了。
教師在使用Moodle建設課程資源的時候,往往用一臺計算機作為服務器添加教學活動和課程資源,完成網絡課程的制作。在這些課程資源建設完成后,若要遷移到另外一臺服務器上,課程資源中的有些內容可以正常顯示,但是有些圖片或文件可能會因為鏈接無效而導致課程資源無法使用,這些問題可用通過修改Mysql數據庫中的數據予以解決。
2原因分析
Moodle中可以添加多種資源,主要包括編寫文本頁、編寫網頁、鏈接到文件或站點、顯示一個目錄、部署IMS包和插入標簽等,不同類型的資源在Mysql數據庫對應表中的字段類型和長度等不同。表1中以顯示一個圖片為例,列出了使用“鏈接到文件”顯示圖片和使用“編寫網頁”顯示一個嵌入式圖片的區別,這兩條記錄都是存儲在表mdl_resource中。

由表1可見,通過“鏈接到文件”所鏈接的圖片,保存在reference字段中,保存的僅是文件名,是一種相對路徑的存儲,沒有固定地和服務器IP地址對應,只要相對位置的圖片還存在,在整個Moodle課程拷貝到其他服務器上時,仍然會正常顯示;而通過“編寫網頁”在網頁中嵌入圖片,是在alltext字段中存儲了該網頁的html語句,其中的211.87.171.227是創建該網頁時所使用服務器的IP地址,alltext字段中的內容不會因為服務器IP地址的改變而改變,該圖片將因找不到IP地址所指向的文件而無法顯示。
除了圖片文件外,其他類型的文件也都存在這種相對位置引用和使用IP地址進行引用的問題。而“添加活動”在Mysql中的存儲方式和資源的存儲方式類似,只不過不同的活動存儲在不同的表中。
3解決方案和步驟
Moodle平臺后臺數據庫可用Mysql,在數據庫管理方面,可以使用命令行,但是太多命令不利于記憶;可以借助于Mysql Administrator管理,但是在安裝和使用方面不是很方便。
PhpMyadmin 是一個以PHP為基礎,以Web-Base方式架構在網站服務器上的Mysql的數據庫管理工具,可以管理整個Mysql服務器,界面簡單友好,在Moodle中可以借助于PhpMyadmin進行數據庫的管理。
3.1在Moodle中添加PhpMyadmin
Moodle1.9版中不包含PhpMyadmin,可以從官方下載站點http://www.PhpMyadmin.net/下載,解壓后得到一個名為PhpMyadmin的文件夾,直接拷貝PhpMyadmin文件夾到..servermoodle文件夾下。
3.2修改配置文件
進入..PhpMyadminlibraries目錄,打開config.default.php文件,找到以下各項,將其后的字符串進行修改,如下:
$cfg['PmaAbsoluteUri'] = '211.87.165.136';
//新服務器的IP地址
$cfg['Servers'][$i]['host'] = 'localhost';
//通常用默認
$cfg['Servers'][$i]['user'] = 'root';
// Mysql的默認用戶
$cfg['Servers'][$i]['password'] = '123456';
// 密碼須與設置Moodle時相對應
$cfg['DefaultLang'] = 'zh';
//選擇語言,zh代表簡體中文
3.3Mysql數據庫管理
打開IE瀏覽器,輸入http:// 211.87.165.136/PhpMyadmin,211.87.165.136就是新服務器的IP地址,就可以用PhpMyadmin管理包括Moodle數據庫在內的Mysql數據庫,如圖1所示。

圖1 用PhpMyadmin管理Moodle數據庫
3.4修改資源的鏈接
為了能夠使課程資源在遷移到新服務器上之后能正常使用,需要修改相關表中的內容,把用文本形式(VARCHAR或MULTITEXT等類型)記錄的鏈接資源修改與新服務器相對應。Moodle數據庫共有200多張表,在課程資源建設完成以后,逐個表進行檢查和修改是不可行的,可以使用游標,用存儲過程自動逐條進行修改。
在Moodle數據庫中建立存儲過程P_ChangeIP,找出含有VARCHAR、MULTITEXT或TEXT類型的字段及其表名,定義一個游標,每次返回的結果是表名和其中的字段名,用CONCAT函數拼接字符串構建SQL語句,在Update命令中使用Replace進行更新,用新服務器的IP地址替換原服務器的IP地址。
存儲過程的代碼如下:
CREATE PROCEDURE P_ChangeIP( )
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tname,cname VARCHAR(64);
DECLARE cur1 CURSOR FOR
SELECT table_name,column_name
FROM information_schema.columns
where table_schema = "moodle" and
(data_type like "%varchar%" or data_ type like "%text%");
--information_schema是系統數據庫,通過它可獲取Moodle數據庫的表名、列名等信息
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO tname,cname;
IF NOT done THEN
set @sql_text:=concat("update ",tname, "set ",cname ," = replace(",cname,",
'211.87.171.227','211.87.165.136')");
prepare stmt from @sql_text;
execute stmt;
deallocate prepare stmt;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END
存儲過程定義完成后,使用CALL Moodle.P_ChangeIP( )命令執行之,就可以一次性完成對相關鏈接數據的修改了。
4結束語
作為一個正在不斷成長、日趨成熟的網絡教學平臺,Moodle的技術在不斷改進之中, 其技術改進需要使用者共同參與,進一步優化軟件功能,開發更多適合國情的教學模塊,為教學提供更好的技術支持。隨著功能的不斷完善,Moodle必將為學校的網絡課程資源建設提供強有力的支持,成為提升教學質量的有力工具。
參考文獻:
[1] 劉貫南,劉榮光,劉曉琴. 基于Moodle網絡課程的設計與實施探索[J]. 現代教育技術,2008(6).
[2] 曹效英,徐勤岸. 基于Moodle的網絡課程開發[J]. 軟件導刊,2008(4).
[3] 楊慧玲,張志潔. Moodle平臺在網絡教育資源建設中的應用[J]. 教育技術導刊,2007(8).
[4] 陳恒法,羅兵. 基于Moodle 教學輔助系統的應用實踐[J]. 中國教育信息化,2007(5).
Solution to Moodle Course Migration Based on Mysql Database
QIAO Xian-liang
(Qingdao Ocean Shipping Mariners College, Qingdao 266071,China )
Abstract: Moodle is an excellent open course management system, It is powerful and easily to operate, can be expediently used to set up a network course. When Moodle course migrate to a new server, some hyperlink resources are disabled because of the change of the new server IP address, analyzing the reason, bringing forward a feasible solution.
Key words: Moodle; course; Mysql; migration