2020年8月19日 星期三

Open edX 的備份與還原

Open edX 是開放原始碼的線上教學平台,

可以除了線上授課之外,

系統的備份與還原也是很重要的,

今天就來教大家:

Open edX 的備份與還原

 Open edX 來自哈佛與麻省理工學院,

提供優質的線上學習平台,

雖說為開源專案,

官方有撰寫技術文件,

但許多細節與錯誤並沒有及時更正,

只能靠廣大使用者分享其解決方案。

在全站備份部分,

官方建議使用底下 script 檔:

#!/bin/bash
MYSQL_CONN="-uroot -p"
echo "Reading MySQL database names..."
mysql ${MYSQL_CONN} -ANe "SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('mysql','information_schema','performance_schema', 'sys')" > /tmp/db.txt
DBS="--databases $(cat /tmp/db.txt)"
NOW="$(date +%Y%m%dT%H%M%S)"
SQL_FILE="mysql-data-${NOW}.sql"
echo "Dumping MySQL structures..."
mysqldump ${MYSQL_CONN} --add-drop-database --skip-add-drop-table --no-data ${DBS} > ${SQL_FILE}
echo "Dumping MySQL data..."
# If there is table data you don't need, add --ignore-table=tablename
mysqldump ${MYSQL_CONN} --no-create-info ${DBS} >> ${SQL_FILE}

for db in edxapp cs_comments_service; do
    echo "Dumping Mongo db ${db}..."
    mongodump -u admin -p -h localhost --authenticationDatabase admin -d ${db} --out mongo-dump-${NOW}
done

tar -czf openedx-data-${NOW}.tgz ${SQL_FILE} mongo-dump-${NOW}

執行後將 MySQL與 Mongo資料庫 都備份並壓縮到名為 openedx-data-[日期].tgz,

MySQL部分為 edxapp 與 edxapp_csmh 兩個資料庫,

在還原之前,

必須先停用所有服務,

sudo /edx/bin/supervisorctl stop all


解開壓縮檔後就能夠直接還原:


$ tar -xvf openedx-data-20200411T154750.tgz 

$ mysql -uroot -p < mysql-data-20200411T154750.sql 

$ mongorestore -u admin -h localhost --authenticationDatabase admin --drop -d edxapp mongo-dump-20200411T154750/edxapp 

$ mongorestore -u admin -h localhost --authenticationDatabase admin --drop -d cs_comment_service mongo-dump-20200411T154750/cs_comment_service


資料庫密碼的話請依照伺服器設定修改,

參照安裝時保留的 my-passwords.yml ,

或者到 /edx/app/edxapp/lms.auth.json 中尋找,

如果是部分還原的話,

可透過資料庫 GUI 工具來執行會比較方便,

例如 mysql-workbench 此類工具。


Open edX 的版本經常更新,

更新的資料搬移,

操作的步驟與上述步驟雷同。

沒有留言: