Open edX每年发布两个大版本,版本之间的直接升级困难,几乎等于重装。因此如果要把原有的实例升级到新版本,可行的方式是:

1.在新的服务器上安装新版本Open edX

2.在新版本Open edX进行同等的配置和定制,如语言、配置文件、Xblocks、二次开发等

3.导出老版本Open edX数据,导入到新版本Open edX

4.运行数据升级脚本。如果有问题,手工调整数据结构

目前可以参考的文档有 https://groups.google.com/forum/#!searchin/edx-code/migrate%7Csort:date/edx-code/FZdfXAaawsk/m-Tywq3hGQAJ 以及 https://blog.just4fun.site/edx-data-migrate.html。这两份文档都比较老,我们将在Ginkgo.2-InsightsLite镜像上进行F版本的数据升级,来展示目前的升级方法。

我们这次迁移将遵循以下步骤:备份导出源数据库(mysql/mongo);在目标机器上,mysql清空edx相关的库(保留mysql原有的几个库); 导入数据库(mysql/mongo)到目标机器上;在目标机器上执行migrate。

mysql

简单导出 —> $ mysqldump -u root -p –all-databases > ./backup.sql
目标导出 —> $ mysqldump -u root -p –all-databases -e –max_allowed_packet=1048576 –net_buffer_length=16384 > backup.sql

简单导出是在目标机器未知的情况下,直接导出数据库内容。
优点:简单方便,适配于任何目标机器
缺点:在目标机器上导入数据会特别慢!

目标导出是在目标机器已知的情况下,根据目标机器上参数来导出数据
优点:在目标机器上导入数据会很快,甚至可以达到10多倍的差距
缺点:需要预先查看目标机器上mysql的配置参数

如何查看目标机器上mysql相关参数

登陆mysql —> $ mysql -u root -p
查看参数 —> $ show variables like ‘max_allowed_packet’;
—> $ show variables like ‘net_buffer_length’;
根据查看到的value中的值来写导出语句进行导出

mongodb

导出 —> $ mongodump -o ./mongo-backup
导入 —> $ mongorestore -drop ./mongo-backup
在mongodb 3.0以上使用: mongorestore —drop ./mongo-backup // 即使用两个-

执行migrate

执行migrate:
sudo su edxapp -s /bin/bash
cd ~
source edxapp_env
python /edx/app/edxapp/edx-platform/manage.py {lms/cms} syncdb –migrate –settings aws

注意最后一句中的lms/cms是步骤分开的!

静态资源处理

  1. 拷贝主题到 /edx/app/edxapp/themes/ 目录下
  2. 修改 /edx/app/edxapp/lms.env.json —> 设置 FEATURES.USE_CUSTOM_THEME 为 true,并且THEME_NAME修改为主题目录名字
  3. 重新编绎静态资源:
    sudo -H -u edxapp bash
    source /edx/app/edxapp/edxapp_env
    cd /edx/app/edxapp/edx-platform
    paver update_assets cms –settings=aws
    paver update_assets lms –settings=aws