笔者在备份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的值,使其超过课程备份时产生的最大备份数据库大小,即可解决问题。