Activar soporte de 4-bytes para MySQL y MariaDB en Nextcloud

Traduzco la documentación oficial de Nextcloud para este punto.

Para usar emojis (iconitos basados en texto) en tu servidor Nextcloud con una base de datos MySQL, hay que realizar unos retoques en la instalación.

  1. Actualiza tu servidor Nextcloud a la versión 11 o posterior.

  2. Asegúrate de que las siguientes configuraciones de InnoDB están así configuradas en el servidor MySQL. En Raspbian, editamos el archivo de configuración con sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. (Es recomendable hacer una copia de seguridad, por si acaso).
    Si no están, copiamos en el archivo estas tres líneas debajo de [mysqld]. El lugar exacto da igual, pero por mantener el orden, se puede buscar la sección de InnoDB.

    innodb_large_prefix=true
    innodb_file_format=barracuda
    innodb_file_per_table=1
    
  3. Reinicia el servidor MySQL si has tenido que cambiar la configuración en el paso 2.

  4. Cambia la colación y el juego de caracteres de tus bases de datos con la línea a continuación. Si tu base de datos no se llama “nube”, cambia la línea en consonancia.

    ALTER DATABASE nube CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
  5. Marca la configuración mysql.utf8mb4 como “true” en tu  config.php:

    $ sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"
    
  6. Convierte todas las tablas existentes a la nueva colación ejecutando el paso de reparación:

    $ sudo -u www-data php occ maintenance:repair
    

Ahora deberías poder usar emojis en tus nombres de archivo, eventos del calendario, comentarios y mucho más.

Soporte de MariaD

Nota

Esto es todavía más experimental.

  1. Sigue los pasos 1, 2 and 3 de MySQL.

  2. Comprueba si el formato de archivo es Barracuda:

    MariaDB> SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nube%";
    

Si el formato es “Barracuda” para todas y cada una de las tablas, no queda nada por hacer. Continúa con las instrucciones de MySQL. La otra opción posibles es “Antelope”.

  1. Hay que migrar a Barracuda las tablas manualmente, una por una. Sin embargo, las órdenes SQL se pueden crear con facilidad:

    MariaDB> USE INFORMATION_SCHEMA;
    MariaDB> SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "nube";
    

Esto devolverá una orden SQL para cada tabla en la base de datos de Nextcloud. Las filas se pueden copiar rápidamente a un editor de textos, se reemplazan los  “|” y se copian de nuevo los comandos SQL en MariaDB. Si no aparecen errores (en caso de duda, comprueba el paso 2), hemos terminado y no hay nada más que hacer que continuar con los pasos de MySQL.

  1. Es posible, sin embargo, que algunas tablas no se puedan alterar,  fallando la operación con : “ERROR 1478 (HY000): Table storage engine ‘InnoDB’ does not support the create option ‘ROW_FORMAT’”. En este caso, las tablas que fallan tienen un valor de SPACE de 0 en el paso 2. Básicamente, significa que la tabla no tiene una archivo de índice propio, lo que es requerido por el formato Barracuda. Esto se puede solucionar con un comando SQL ligeramente diferente:

    MariaDB> ALTER TABLE `nube`.`oc_tablename` ROW_FORMAT=DYNAMIC, ALGORITHM=COPY;
    

Reemplace “oc_tablename” con la tabla que falle. Si hay demasiadas, se pueden generar las órdenes SQL en lote (tarea para el lector). Ahora todo debería funcionar y podemos continuar con las instrucciones de MySQL.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.