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.