筆者在備份Moodle課程時,發現有些課程能正常備份,有些課程不能夠正常備份,不能正常備份時出現“寫入數據庫時發生錯誤”的提示。
1.為了讓課程備份出現錯誤提示時,顯示更詳細的提示信息,以方便查找問題原因,我用下面的方法打開Moodle調試開關并顯示調試信息:網站管理→開發→調試,將調試信息設置為“標準:顯示錯誤、警告和注意”,將顯示調試信息設置為“是”(如圖1所示)。
注意,在問題修復處理好后,將“顯示調試信息”關閉。
修改調試信息顯示設置后,對不能正常備份的課程進行備份,頁面最下面出現如下調試信息提示:

圖1 將顯示調試信息設置為“是”

圖2 修改max_allowed_packet值

根據提示,說明在發送查詢數據包(QUERY packet)時出錯。
2.在備份時,有些能夠正常備份,有些不能夠正常備份,而且課程中內容較多的課程備份出現問題,問題應該與查詢QUERY
packet的大小有關。
本案例安裝的是MariaDB數據庫,與MySQL完全兼容,可修改/usr/local/etc/my.cnf配置,將“max_allowed_packet”的值修改為100M,數據庫系統默認的max_allowed_packet值為 1M,如果修改為100M后仍然出現“寫入數據庫時出錯”的提示,可試著加大“max_allowed_packet”的值,直到能正常備份時為止。
本案例中,我們用命令“nano /usr/local/etc/my.cnf”來將原來“max_allowed_packet=1M” 改成“max_allowed_packet=100M”(如圖2)。
3.修改max_allowed_packet數值后,用命令“service mysqlserver restart”重啟數據庫,原來不能正常備份的課程也能正常進行備份,至此問題已得到解決。
將“網站管理→開發→調試→顯示調試信息”關閉,調試信息也設置為:“無:不顯示任何錯誤或警告”,以優化Moodle的訪問速度。
本Moodle系統的環境是FreeBSD+Nginx+MariaDB+PHP,在安裝MariaDB數據庫時,沒有修改數據庫配置文件my.cnf中max_allowed_packet的大小,當課程內容較大時,備份數據庫的容量超過max_allowed_pachet的 默認值1M,在備份課程時便出現“寫入數據庫時發生錯誤”的提示。只要修改max_allowed_pachet的值,使其超過課程備份時產生的最大備份數據庫大小,即可解決問題。