Cómo convertir tablas InnoDB a Barracuda

Cómo convertir tablas InnoDB a Barracuda
4.5
(8)

Si estás empezando con tu web, sé que hablar de hacer cambios en la base de datos puede parecer de todo menos fácil, pero hay veces que son necesarios para mejorar el rendimiento de nuestra aplicación. ¿Un caso muy habitual? Convertir tablas InnoDB a Barracuda. Es un cambio bastante sencillo y que te permitirá optimizar y mejorar el rendimiento web, sobre todo si se trata de un sitio muy grande.

Si trabajas con Moodle, habrás visto en más de una ocasión que la propia aplicación te sugiere realizar un cambio en el formato de las tablas de la base de datos, de Antelope a Barracuda. Realmente es una modificación bastante sencilla, pero que a veces evitamos hacer por no tener información suficiente o miedo a que algo salga mal.

Así que hoy vamos a ponerle remedio a esto. A continuación te explico qué son las tablas InnoDB, por qué es recomendable hacer el cambio de Antelope a Barracuda y cómo realizar este proceso manualmente y automáticamente, ejecutando un script.

¿Nos ponemos con ello?

¿Qué son las tablas InnoDB?

InnoDB es un mecanismo de almacenamiento de datos (storage-engine) transaccional y con capacidades de confirmación (commit), cancelación (rollback) y recuperación de fallos. Además tiene soporte de claves foráneas, esto quiere decir que InnoDB permite relacionar tablas de forma dentro de la base de datos, eliminando inconsistencias de forma automática.

Las tablas InnoDB fueron diseñadas para obtener máximo rendimiento en aplicaciones que mueven un gran volumen de datos. De hecho, es el tipo de tablas que utilizan algunos gestores de contenido como Joomla, PrestaShop o Moodle.

Formatos de las tablas InnoDB

El formato que utilizan las tablas determinan cómo se almacenan los datos, por tanto, influyen en el rendimiento de las consultas u operaciones que ejecutemos, y por tanto, de la página web o la aplicación.

En las tablas InnoDB podemos diferenciar estos dos formatos:

  • Antelope: es el formato original de las tablas InnoDB y admite formatos de fila COMPACT y REDUNDANT.
  • Barracuda: es el formato más nuevo. Además de admitir los formatos de fila de Antelope (COMPACT y REDUNDANT), también soporta COMPRESSED y DYNAMIC, es decir, formatos de fila comprimidas y un almacenamiento más eficiente.

Aquí te dejo una tabla resumen con las principales características de cada formato:

Características del formato de tablas InnoDB: Antelope y Barracuda

Debido a la mejora que implica utilizar el formato Barracuda en las tablas InnoDB, muchas aplicaciones recomiendan su uso. Por ejemplo, en Moodle es casi imprescindible realizar el cambio de Antelope a Barracuda si tienes una web que está creciendo o en la que tienes muchos plugins.

Pero, ¿por qué es tan importante hacer el cambio de Antelope a Barracuda en Moodle?

Las últimas versiones de Moodle sugieren realizar el cambio de formato de las tablas Antelope a Barracuda. La razón principal por la que recomiendan hacer esta modificación es que las tablas con formato Antelope no soportan más de 10 columnas de texto y existen plugins que requieren más columnas de texto, pudiendo generar errores que afectan al funcionamiento normal de tu página web.

¿Trabajas con Moodle? Entonces es probable que hayas visto en tu aplicación un aviso que dice lo siguiente:

Your database has tables using Antelope as the file format. You are recommended to convert the tables to the Barracuda file format. See the documentation Administration via command line for details of a tool for converting InnoDB tables to Barracuda.

Otra de las razones de peso para realizar el cambio de formato y convertir las tablas Antelope a Barracuda es el rendimiento y optimización web.

Barracuda es el formato de archivo más nuevo y la principal ventaja que porta respecto a Antelope es la compresión de datos. Barracuda admite todos los formatos de fila (incluidos los formatos comprimidos y dinámicos), ayudando a reducir los requerimientos de CPU y disco del servidor, obteniendo así unos mejores resultados.

Cómo convertir tablas InnoDB a Barracuda

Como hemos visto, una de las aplicaciones más utilizadas y en las que se recomienda convertir tablas InnoDB a Barracuda es Moodle. No obstante, este cambio se hace exactamente de la misma forma en Moodle o cualquier otra aplicación con la que estás trabajando.

¿Vemos cómo se hace?

1. Realiza una copia de seguridad

Es algo que recomiendo siempre. Si vas a hacer cualquier cambio en tu web, por pequeño que sea, asegúrate de tener una copia de seguridad de tu cuenta.

Si tienes un Hosting Moodle o utilizas cualquier otro servicio de alojamiento con nosotros como, por ejemplo, Hosting SSD o Hosting elástico, recuerda que desde tu área de cliente tienes acceso a Premium Backup. Una herramienta desarrollada por nosotros que realiza dos copias de seguridad al día y que te da la opción de restaurar toda tu cuenta, una aplicación, una base de datos o incluso o una cuenta de correo en solo un par de clics. Así, te aseguras de que todo tu trabajo está siempre a salvo 🙂
Hosting Moodle

2. Comprueba qué formato de tablas estás utilizando

Para evitar realizar cambios innecesarios, lo mejor es que primero compruebes qué formato de tablas estás utilizando. Puede ser que, si estás alojado en un servidor con las versiones más recientes, tu aplicación ya esté trabajando con el formato Barracuda.

La comprobación es muy simple, simplemente tienes que seguir estos pasos:

  1. Accede al panel de control de tu alojamiento. Si necesitas ayuda o recuerdas los datos de acceso, este post puede ayudarte: Cómo entrar a cPanel.Pantalla de acceso a cPanel
  2. Ahora ve a la sección «Base de datos», selecciona la opción «phpMyAdmin».phpMyAdmin cPanel
  3. En la pestaña SQL ejecuta la siguiente consulta, incluyendo el nombre de tu base de datos.
    SHOW TABLE STATUS FROM NOMBRE_BASE_DE_DATOS WHERE engine='InnoDB'

Con esta consulta verás un montón de información relacionada con tu base de datos. Para saber qué formato de tablas utiliza, fíjate en los valores de la columna «Row_format».

Comprobar el formato de tablas de una base de datos

Los valores COMPRESSED y DYNAMIC indican que ya estás utilizando Barracuda, por lo que no necesitarás hacer ninguna modificación. En LucusHost es el formato que utilizamos por defecto, por lo que no tendrás que preocuparte de hacer este cambio.

En cambio, si los resultados arrojan el formato COMPACT o  REDUNDANT, significa que trabajas con el formato Antelope. De ser así, pasamos al siguiente punto para hacer la conversión de InnoDB a Barracuda.

3. Convierte las tablas InnoDB a Barracuda

Para cambiar el formato de Antelope a Barracuda tienes dos opciones. Realizar el cambio de forma manual, tabla a tabla, o ejecutar un script que realice el cambio de forma masiva.

3.1. Cómo convertir tablas InnoDB a Barracuda de forma manual

Hacer la conversión a Barracuda de forma manual es muy sencillo, aunque algo laborioso, sobre todo, si tienes muchas filas en la base de datos:

  1. Vuelve a «phpMyAdmin» y selecciona la base de datos de tu aplicación Moodle.Seleccionar una base de datos en phpMyAdmin
  2. Ahora selecciona la tabla de la base de datos y, en la columna «Acción», selecciona la opción «Estructura». A continuación se abrirá una nueva pestaña, ve al menú superior y selecciona «Operaciones».Operar sobre una tabla de la base de datos
  3. En la pestaña «Opciones de tabla», ve a la «Row format» y, en el desplegable, selecciona la opción «Compressed». Por último, pulsa en «Continuar» para que se guarden los cambios.Convertir tabla InnoDB a Barracuda

Importante: Si no tienes la opción «Compressed» o «Dynamic» es probable que tu proveedor de hosting o el servidor en el que estás alojado no soporte el formato de tablas Barracuda. No obstante, te recomiendo que contactes directamente con ellos para puedan ofrecerte alguna solución.

También puedes realizar esta misma acción ejecutando un comando para cada una de las tablas de tu base de datos. Para ello, accede desde «phpMyadmin» a tu base de datos y, en la pestaña «SQL» lanza la siguiente petición:

ALTER TABLE NOMBRE_TABLA ROW_FORMAT=COMPRESSED

Recuerda sustituir NOMBRE_TABLA por el nombre de la tabla de tu base de datos y darle a «Continuar» para guardar los cambios.

3.2. Cómo convertir tablas InnoDB a Barracuda mediante un script.

Otra forma de realizar el cambio en Moodle para convertir una tabla con formato Antelope en Barracuda es ejecutando un script. Realmente es mucho más cómodo que hacer el cambio tabla por tabla, sobre todo cuando tienes una base de datos muy grande.

A continuación te dejo el script que hemos creado y que es compatible con las versiones de PHP más recientes. Puedes subirlo a tu hosting desde el «Administrador de archivos de cPanel» y ejecutarlo escribiendo la URL en tu navegador web. Por ejemplo, https://www.tudominio.es/script.php

Importante: Recuerda sustituir los valores servidor, usario, contraseña y nombre de la base de datos por los que corresponda en tu caso.

<?php

$servidor_db="localhost";            // servidor de base de datos
$usuario_db="USUARIO_BBDD";         // usuario de conexión a la base de datos
$password_db="CONTRASEÑA";         // contraseña de acceso del usuario anterior
$nombre_db="NOMBRE_BBDD";         // nombre de la base de datos que queremos convertir a Barracuda

convert_tables();

function connect()
{
    GLOBAL $servidor_db,$usuario_db,$password_db,$nombre_db;
    if(function_exists('mysqli_connect'))
    {
        //echo "mysqli_query".PHP_EOL;
        $link = mysqli_connect($servidor_db, $usuario_db, $password_db) OR die('Error de conexión a la base de datos: ' . mysqli_error($link));
        mysqli_select_db($link, $nombre_db) OR die('El usuario "'.$usuario_db.'" no tiene privilegios sobre la base de datos "'.$nombre_db.'".');
        return $link;
    }
    elseif(function_exists('mysql_connect'))
    {
        //echo "mysql_query".PHP_EOL;
        $link = mysql_connect($servidor_db, $usuario_db, $password_db) OR die('Error de conexión a la base de datos: ' . mysql_error());
        mysql_select_db($nombre_db,$link) OR die('El usuario "'.$usuario_db.'" no tiene privilegios sobre la base de datos "'.$nombre_db.'".');
        return $link;
    }
    
    die('Error de conexión a la base de datos');
}
function query($query,$link)
{
    $res=false;
    if(function_exists('mysqli_query'))
        $res = mysqli_query($link,$query);
    elseif(function_exists('mysql_query'))
        $res = mysql_query($query,$link);
    return $res;
}
function query_fetch($query,$link)
{
    $res=query($query,$link);
    $rows=array();
    if($res)
    {
        if(function_exists('mysqli_fetch_array'))
        {
            while($row = mysqli_fetch_array($res))
                $rows[]=$row;
        }
        elseif(function_exists('mysql_query'))
        {
            while($row = mysql_query($res))
                $rows[]=$row;
        }
    }
    return $rows;
}
function convert_tables()
{
    $link=connect();
    $tables=query_fetch("SHOW TABLE STATUS",$link);
    foreach($tables as $table)
    {
        if($table['Engine']=='InnoDB')
        {
            if(in_array($table['Row_format'],array("Dynamic","Compressed")))
                echo 'INFO: Tabla "'.$table['Name'].'" ya tenía formato Barracuda, por lo tanto la omitimos.';
            else
            {
                if(query("ALTER TABLE " . $table['Name'] . " ROW_FORMAT=COMPRESSED",$link))
                    echo 'CONVERTIDA: Tabla "'.$table['Name'].'"';
                else
                    echo 'ERROR: Tabla "'.$table['Name'].'", no se ha podido asignar formato Barracuda, posiblemente el servidor no es compatible.';
            }
        }
        else{
            echo 'INFO: Tabla "'.$table['Name'].'" no es InnoDB, por lo tanto no aplicable a esta tabla y la omitimos.';
        }
        echo "<br>".PHP_EOL;
    }
}
?>

Conclusión

Para mejorar el rendimiento y la optimización web, muchas aplicaciones recomiendan convertir las tablas InnoDB a Barracuda. Especialmente en Moodle, donde algunos plugins ya no son compatibles con las tablas Antelope y es necesario realizar este cambio sí o sí.

Tienes dos formas de realizar este cambio; manualmente, seleccionando Barracuda para cada tabla de tu base de datos o ejecutando un script. ¡Tú elige la que te sea más cómoda!

¿Alguna duda? ¿Has tenido problemas a la hora de realizar la conversión de InnoDB a Barracuda? Déjame un comentario e intento echarte una mano 🙂 .

Hosting Moodle

¡Puntúa este artículo!

Total votos: 8. Promedio: 4.5

Tags:
María Acibeiro

Dicen que si trabajas en lo que te gusta, no tendrás que trabajar nunca más. Así que, por aquí nos veremos mucho más de lo que te imaginas 😜

4 Comentarios
  • Edilberto Calderón
    Posted at 07:09h, 12 octubre Responder

    Buen día, podría ayudarme? Este es mi problema
    mysql_full_unicode_support#File_format
    esta prueba debe pasarAbrir en una nueva ventana
    Su base de datos utiliza Antelope como formato de archivo. La compatibilidad total con UTF-8 en MySQL y MariaDB requiere el formato de archivo Barracuda. Por favor, cambie al formato de archivo Barracuda. Consulte la documentación MySQL full unicode support para obtener más detalles.
    mysql_full_unicode_support#Large_prefix
    esta prueba debe pasarAbrir en una nueva ventana
    Para el soporte completo de UTF-8 en MySQL y MariaDB se requiere cambiar la opción de MySQL ‘innodb_large_prefix’ a ‘ON’. Mira la documentación para más detalles.
    coloque los siguientes códigos. Pero no hizo efecto
    SET GLOBAL innodb_file_format=Barracuda;
    SET GLOBAL innodb_large_prefix = ON;

    • María Acibeiro
      Posted at 08:37h, 13 octubre Responder

      Hola Edilberto,

      Entiendo que estás intentando cambiar una variable global de MariaDB y esto, por ejemplo, en un hosting compartido no se puede hacer. ¿Has probado a seguir los pasos de esta guía? De esta forma, deberías poder hacer la conversión sin problema.

      Si tienes tu web alojada con nosotros, escríbenos a soporte@lucushost.com y te echamos una mano a hacerlo 🙂

      ¡Un saludo!

  • Renata
    Posted at 04:34h, 03 agosto Responder

    Hola,

    Me salen todas las tablas compressed. Igualmente Moodle me marca una serie de problemas que no he podido resolver con las bases de datos. Te podría enviar el reporte completo a ver si me puedes echar una mano? Te lo agradecería mucho. Saludos

    • María Acibeiro
      Posted at 15:20h, 03 agosto Responder

      Hola Renata,

      Si tienes tu hosting con nostros, envíanos esta misma consulta a soporte@lucushost.com y te ayudamos para que puedas resolverlo lo antes posibles 🙂

      En caso contrario, sin poder acceder a tu aplicación para ver exactamente qué errores está generando, quizá no te pueda dar una solución.

      ¡Gracias por leernos!

Escribe un comentario