elearningServicio TécnicoSistemas

Convertir tablas Moodle/MySQL de Antelope a Barracuda

Actualizando a Moodle 3.5 he tenido que cambiar las tablas de Antelope a Barracuda ya que era un requisito (además de tener que añadir PHP 7), y siguiendo la documentación oficial he intentado ejecutar el script mysql_compressed_rows.php la hacer “fix” me ha devuelto un error por no tener innodb_file_per_table habilitado, razón por la que he tenido que hacerlo mediante las sentencias SQL que “showsql” me ha mostrado más la línea SET GLOBAL innodb_large_prefix=1 ya que el instalador se me seguía quejando…

Según la documentación oficial de MySQL, InnoDB soporta actualmente dos formatos:

  • Antelope is the original InnoDB file format, which previously did not have a name. It supports COMPACT and REDUNDANT row formats for InnoDB tables and is the default file format in MySQL 5.6 to ensure maximum compatibility with earlier MySQL versions that do not support the Barracuda file format.
  • Barracuda is the newest file format. It supports all InnoDB row formats including the newer COMPRESSED and DYNAMIC row formats. The features associated with COMPRESSED and DYNAMIC row formats include compressed tables, efficient storage of off-page columns, and index key prefixes up to 3072 bytes (innodb_large_prefix).

Dejo a continuación la salida de los scripts de Moodle para la posteridad:

# php admin/cli/mysql_compressed_rows.php --list
mdl_data Compact (needs fixing)
mdl_data_fields Compact (needs fixing)
mdl_enrol_paypal Compact (needs fixing)
mdl_lti Compact (needs fixing)
mdl_user Compact (needs fixing)
mdl_user_info_field Compact (needs fixing)
# php admin/cli/mysql_compressed_rows.php --fix
Cannot enable GLOBAL innodb_file_per_table setting, use --showsql option and execute the statements manually.!!! Error al escribir a la base de datos !!!
#php admin/cli/mysql_compressed_rows.php --showsql
Copy the following SQL statements and execute them using account with SUPER privilege:

USE moodle;
SET SESSION sql_mode=STRICT_ALL_TABLES;
SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_file_format=Barracuda;
ALTER TABLE mdl_data ROW_FORMAT=Compressed;
ALTER TABLE mdl_data_fields ROW_FORMAT=Compressed;
ALTER TABLE mdl_enrol_paypal ROW_FORMAT=Compressed;
ALTER TABLE mdl_lti ROW_FORMAT=Compressed;
ALTER TABLE mdl_user ROW_FORMAT=Compressed;
ALTER TABLE mdl_user_info_field ROW_FORMAT=Compressed;

Añadir por último que en otros artículos que he consultado, hablaban de agregar la configuración en la sección [mysqld] del archivo my.cnf, pero esto no he llegado a probarlo…