Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Moodle与Amazon Aurora:索引列大小太大。最大列大小为767字节_Moodle_Amazon Aurora - Fatal编程技术网

Moodle与Amazon Aurora:索引列大小太大。最大列大小为767字节

Moodle与Amazon Aurora:索引列大小太大。最大列大小为767字节,moodle,amazon-aurora,Moodle,Amazon Aurora,在执行数据库创建时,Aurora向Moodle抛出以下错误: ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes. 它发生在每个具有bigint10id列的表上,如mdl\u config或mdl\u course 这似乎与梭鱼的形式有关。数据库中存在的InnoDB文件变量有: innodb_file_format = Barracuda innodb_file_format

在执行数据库创建时,Aurora向Moodle抛出以下错误:

ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
它发生在每个具有bigint10id列的表上,如mdl\u config或mdl\u course

这似乎与梭鱼的形式有关。数据库中存在的InnoDB文件变量有:

innodb_file_format = Barracuda
innodb_file_format_check = ON
innodb_file_format_max = Antelope
innodb_file_file_per_table = ON
我必须说,在Aurora参数组中,无法更改innodb_file_format_max配置


我使用的Moodle版本是3.1.6。

这个问题的解决方案是创建一个MySQL RDS实例而不是Aurora RDS,继续Moodle安装,完成后,创建MySQL RDS的备份,并在Aurora RDS中恢复


问题只出现在安装阶段,之后Aurora RDS可以与先前创建的安装模式一起使用。

我找到了解决此问题的方法。我们需要将ROW_格式更改为Dynamic,然后它才能工作。要更改行格式,请从Moodle目录打开以下文件: moodle/lib/dml/mysqli_native_moodle_database.php

将第420行从{$rowformat=ROW_FORMAT=Compressed;}编辑到{$rowformat=ROW_FORMAT=Dynamic;}


它实际上会使if条件为空,该条件检查DB是否支持压缩的ROW_格式。如果是,则将ROW_格式设置为Compressed。这是唯一让它对我有效的黑客攻击。

如果您要将现有的onprem moodle迁移到aws aurora mysql数据库,请执行以下操作(假设双方都是linux)

确保已将当前moodle升级到将首先进行aws do备份的同一版本

执行mysqldump ex:mysqldump-allow keywords-opt-uAdminUser-p MoodleDBName>moodle_onprem.sql

tar up和压缩sql使传输变得更小,例如:tar cvzf moodle_onprem.tgz moodle_onprem.sql

将tgz文件复制到3c2实例,可能是您的moodle服务器,该服务器可以使用您喜爱的文件传输工具访问auroa。我使用了一个简单的scp,因为我们有一个直接连接,例如:scp-I/home/ec2 user/id\u rsasomeuser@onprembox:/var/www/html/moodle-onprem.tgz/

卸载/压缩文件。ex:tar xvzf moodle-onprem.tgz

重要的一步。将行格式更改为DYNAMIC ex:sed-is/row_format=COMPRESSED/row_format=DYNAMIC/moodle-onprem.sql

还要修改moodle/lib/dml/mysqli_native_moodle_database.php请参见rowit提供的答案,以编辑从{$rowformat=ROW_FORMAT=Compressed;}到{$rowformat=ROW_FORMAT=Dynamic;}的行

恢复您的moodle数据库。例如:mysql-h YourAruoraDBEndNode-u YourAdminUser-p YourMoodleDBName 将您的moodle和moodle数据传输到您的aws moodle服务器,您应该已经准备好了