Compilación y configuración de MySQL Shell 8.0.32 para entornos GreatSQL

Con el lanzamiento de GreatSQL 8.0.32-24, se hace indispensable actualizar las herramientas periféricas, específicamente el MySQL Shell. La transición de la versión 8.0.25 a la 8.0.32 introduce mejoras significativas y nuevas funcionalidades que optimizan la gestión de bases de datos. A continuación, se detalla el procedimiento técnico para compilar esta herramienta desde el código fuente.

1. Requisitos y entorno inicial

Para garantizar un proceso de compilación limpio, se recomienda el uso de un contenedor Docker basado en una distribución Linux estable (como CentOS o similar). Es fundamental contar con las herramientas de desarrollo estándar: gcc, cmake, make y patch.

1.1 Obtención de dependencias

Es necesario descargar y organizar los siguientes paquetes en un directorio de trabajo (por ejemplo, /src_build/):

  • antlr4-cpp-runtime-4.10: Motor para el análisis de gramáticas.
  • boost_1_77_0: Bibliotecas extendidas de C++.
  • mysql-8.0.32: Código fuente del servidor MySQL (requerido para las bibliotecas de cliente).
  • mysql-shell-8.0.32-src: Código fuente del Shell.
  • patchelf-0.14.5: Utilidad para modificar archivos ELF.
  • protobuf-all-3.19.4: Mecanismo de serialización de datos.
  • rpcsvc-proto-1.4: Generador de protocolos RPC.

1.2 Aplicación del parche para GreatSQL

Para habilitar el soporte de nodos de arbitraje (ARBITRATOR) en GreatSQL, se debe aplicar el parche específico al código fuente del Shell:

cd /src_build/mysql-shell-8.0.32-src
patch -p1 -f < /src_build/mysqlsh-for-greatsql-8.0.32.patch

2. Construcción de componentes básicos

Antes de abordar el Shell, debemos compilar las librerías de soporte.

2.1 Antlr4 y Patchelf

Primero, instalamos las dependencias de UUID y procedemos con Antlr4:

yum install -y libuuid-devel uuid
cd /src_build/antlr4-4.10/runtime/Cpp/
mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4
make -j$(nproc) && make install

Para patchelf, el proceso sigue el estándar de autotools:

cd /src_build/patchelf-0.14.5
./bootstrap.sh && ./configure && make -j$(nproc) install

2.2 Protobuf y Rpcsvc

Compilamos Protobuf, esencial para la comunicación de X Protocol:

cd /src_build/protobuf-3.19.4
./configure && make -j$(nproc) install

cd /src_build/rpcsvc-proto-1.4
./configure && make -j$(nproc) install

3. Compilación de MySQL Client

MySQL Shell depende de las librerías internas de MySQL. Debemos generar mysqlclient y mysqlxclient:

cd /src_build/mysql-8.0.32
mkdir -p build && cd build
cmake .. -DBOOST_INCLUDE_DIR=/src_build/boost_1_77_0 \
-DLOCAL_BOOST_DIR=/src_build/boost_1_77_0 \
-DWITH_SSL=system
cmake --build . --target mysqlclient -- -j$(nproc)
cmake --build . --target mysqlxclient -- -j$(nproc)

4. Compilación de MySQL Shell 8.0.32

Para esta etapa, se requiere Python 3.8 y cabeceras de SSH. Instalamos los paquetes necesarios:

yum install -y python38 python38-devel libssh-devel

Configuramos y ejecutamos la compilación final especificando las rutas de las librerías generadas anteriormente:

cd /src_build/mysql-shell-8.0.32-src/
mkdir -p build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/greatsql-shell-8.0.32 \
-DMYSQL_SOURCE_DIR=/src_build/mysql-8.0.32 \
-DMYSQL_BUILD_DIR=/src_build/mysql-8.0.32/build/ \
-DHAVE_PYTHON=1 \
-DWITH_PROTOBUF=bundled \
-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \
-DPYTHON_LIBRARIES=/usr/lib64/python3.8 \
-DPYTHON_INCLUDE_DIRS=/usr/include/python3.8/
make -j$(nproc) && make install

5. Verificación y resolución de dependencias de tiempo de ejecución

Al intentar ejecutar mysqlsh, es posible que el sistema no localice libprotobuf.so.30. Debemos vincularla manualmente al directorio de librerías del Shell:

cp /usr/local/lib/libprotobuf.so.30 /usr/local/greatsql-shell-8.0.32/lib/mysqlsh/
# Verificar enlaces
ldd /usr/local/greatsql-shell-8.0.32/bin/mysqlsh | grep libprotobuf

Si al iniciar el Shell se reporta la falta del módulo certifi en Python, instálelo mediante pip:

pip3.8 install --user certifi

Tras estos pasos, el ejecutable estará listo para operar:

/usr/local/greatsql-shell-8.0.32/bin/mysqlsh --version

6. Automatización mediante Docker

Para simplificar procesos futuros, se puede encapsular toda la lógica en un script de automatización y un Dockerfile. Esto permite mapear los volúmenes del código fuente y ejecutar un único comando de construcción:

# Ejemplo de ejecución del script de automatización dentro del contenedor
sh ./greatsql-shell-automake.sh /src_build/mysql-8.0.32 /src_build/mysql-shell-8.0.32-src /src_build/boost_1_77_0

Este enfoque garantiza un entorno consistente, libre de conflictos entre versiones de compiladores o librerías del sistema anfitrión, permitiendo desplegar rápidamente MySQL Shell en infraestructuras basadas en GreatSQL.

Etiquetas: MySQL GreatSQL compilation Database-Tools Docker

Publicado el 7-16 02:26