Instrucciones para la migración de MySQL → PostgreSQL#
Introducción#
¡IMPORTANTE! SI su versión de AI Server es igual o menor a 2.0.0, entonces en su versión se utilizan MySQL y PostgreSQL 16 simultáneamente. En la nueva versión 2.1.0+ se utiliza solo PostgreSQL 17.
Necesita realizar la migración de MySQL a PostgreSQL, así como migrar los datos de la versión 16 de PostgreSQL a la versión 17.
Esta instrucción describe el proceso de migración de la base de datos Sherpa AI Server de MySQL a PostgreSQL. La migración incluye la transferencia de datos, la actualización de configuraciones y la transición a un nuevo sistema de gestión de bases de datos.
¡ATENCIÓN! Si tiene la posibilidad de RENUNCIAR A LOS DATOS (SI NO LOS NECESITA), le recomendamos que en lugar de seguir esta instrucción, consulte la guía de instalación desde cero:
Requisitos del sistema#
Requisitos mínimos para la migración:#
- Espacio libre en disco: mínimo 2x el tamaño de la base de datos (para datos originales + migración)
- Memoria RAM: mínimo 4 GB de RAM para pgloader
- Docker: versión 20.10+ con soporte para Docker Compose
- Conexión de red: conexión estable a las bases de datos
Comprobaciones previas#
Antes de iniciar la migración, realice las siguientes comprobaciones:
# Verifique el espacio disponible en disco
df -h
# Verifique la memoria RAM disponible
free -h
# Verifique el estado de Docker
docker --version
docker compose version
# Verifique la disponibilidad de las bases de datos
docker ps | grep -E "(mysql|postgres)"
💡 Comentarios sobre las comprobaciones
df -h - muestra el uso del espacio en disco en un formato legible para humanos
- Asegúrese de que el espacio libre sea al menos 2 veces mayor que el tamaño de su base de datos
free -h - muestra información sobre la memoria RAM
- Se requieren al menos 4 GB de RAM para pgloader
- Si hay insuficiente memoria, la migración puede fallar con el error "Heap exhausted"
docker --version - verifica la versión de Docker
- Se requiere Docker 20.10+ para el correcto funcionamiento de todas las funciones
docker compose version - verifica la versión de Docker Compose
- Asegúrese de que compose soporte la sintaxis moderna
docker ps - muestra los contenedores en ejecución
- Deben ser visibles los contenedores mysql/postgres para acceder a los datos
Preparación para la migración#
Descarga de archivos necesarios#
Si el entorno está cerrado, es necesario descargar de antemano los ARCHIVOS PARA LA INSTALACIÓN y además los siguientes archivos:
curl -fSL -OJ https://sherparpa.ru/downloads/private/SherpaAIServer/pgloader_image.tar
curl -fSL -OJ https://sherparpa.ru/downloads/private/SherpaAIServer/alpine_image.tar
💡 Comentarios sobre la descarga de archivos
curl -fSL -OJ - descarga archivos desde el servidor
-f- finaliza silenciosamente en caso de errores del servidor-S- muestra errores incluso al usar -f-L- sigue redirecciones-O- guarda el archivo con el nombre del servidor-J- utiliza el nombre de archivo proporcionado por el servidor
pgloader_image.tar - imagen de Docker con la herramienta pgloader para la transferencia de datos alpine_image.tar - imagen ligera de Linux para operaciones con archivos
Cree un directorio /opt/SherpaAIServerNew y coloque en él todos los archivos y ARCHIVOS DE LA INSTRUCCIÓN DE INSTALACIÓN:
# Cree un nuevo directorio para la migración
sudo mkdir -p /opt/SherpaAIServerNew
# Mueva los archivos descargados al nuevo directorio (y los archivos de la preparación para la descarga)
sudo mv pgloader_image.tar /opt/SherpaAIServerNew/
sudo mv alpine_image.tar /opt/SherpaAIServerNew/
💡 Comentarios sobre la preparación del directorio
sudo mkdir -p - crea un directorio con carpetas padres
-ppreviene el error si el directorio ya existe
sudo mv - mueve archivos al nuevo directorio
- Mover a
/opt/SherpaAIServerNewaislará los archivos de migración de la instalación actual
Lo que se descarga:
pgloader_image.tar- imagen de Docker con pgloader y herramientas necesariasalpine_image.tar- imagen ligera de Alpine Linux para trabajar con volúmenes (no afecta su sistema operativo actual)
Detención de servicios#
- Detener contenedores excepto las bases de datos:
# ir al antiguo directorio
cd /opt/SherpaAIServer/
docker compose stop orchestrator embed nginx vllm
docker-compose stop orchestrator embed nginx vllm
# ir al nuevo directorio
cd /opt/SherpaAIServerNew/
💡 Comentarios sobre la detención de servicios
docker compose stop - detiene los servicios especificados sin eliminarlos
orchestrator- servicio principal de orquestaciónembed- servicio para trabajar con embeddingsnginx- servidor web y proxyvllm- servicio de modelo de lenguaje
Dos comandos - se ejecutaron ambas versiones de la sintaxis para compatibilidad Servicios restantes - pgembeding (PostgreSQL con embeddings) y orchestrator-db (MySQL) deben seguir funcionando para acceder a los datos
¿Por qué detenemos los servicios? Durante la migración es necesario excluir cualquier cambio en la base de datos para garantizar la consistencia de los datos.
Nota: No es necesario eliminar contenedores, solo detenerlos. Deben permanecer pgembeding y orchestrator-db.
Creación de copias de seguridad#
Definición de nombres de volúmenes:
Primero, encuentre los nombres correctos de los volúmenes en su sistema:
docker volume list
💡 Comentarios sobre la definición de volúmenes
docker volume list - muestra todos los volúmenes de Docker en el sistema
DRIVER- tipo de controlador (generalmente local)VOLUME NAME- nombre único del volumen
El prefijo de los nombres - depende del nombre de la carpeta del proyecto:
- Para la carpeta
SherpaAIServer→ prefijosherpaaiserver_ - Para la carpeta
myproject→ prefijomyproject_
Volúmenes principales:
*orchestrator-mysql-data- datos de la base de datos MySQL*pgdata- datos de la base de datos PostgreSQL*storage- almacenamiento de archivos
Ejemplo de salida:
DRIVER VOLUME NAME
local sherpaaiserver_orchestrator-mysql-data
local sherpaaiserver_pgdata
local sherpaaiserver_storage
Creación de copias de seguridad de volúmenes:
Reemplace los nombres de los volúmenes por los actuales de su lista:
# Copia de seguridad de los datos de MySQL (reemplace VOLUME_NAME por el nombre real)
docker run --rm -v VOLUME_NAME:/data -v $(pwd)/backup_mysql:/backup pgembeding tar czf /backup/mysql_backup.tar.gz -C /data .
# Copia de seguridad de los datos de PostgreSQL (si existen) (reemplace VOLUME_NAME por el nombre real con postgres)
docker run --rm -v VOLUME_NAME:/data -v $(pwd)/backup_pg:/backup pgembeding tar czf /backup/pg_backup.tar.gz -C /data .
💡 Comentarios sobre la creación de copias de seguridad
docker run --rm - ejecuta un contenedor y lo elimina automáticamente después de la ejecución
--rmpreviene la acumulación de contenedores detenidos
Montaje de volúmenes:
-v VOLUME_NAME:/data- monta el volumen de Docker en el contenedor-v $(pwd)/backup_mysql:/backup- monta una carpeta local para guardar el archivo
tar czf - crea un archivo comprimido
c- crear archivoz- comprimir usando gzipf- especificar el nombre del archivo-C /data .- cambia el directorio a /data antes de archivar
pgembeding - utiliza la imagen existente de PostgreSQL con herramientas
Ejemplos con nombres específicos:
Para un proyecto en la carpeta SherpaAIServer:
docker run --rm -v sherpaaiserver_orchestrator-mysql-data:/data -v $(pwd)/backup_mysql:/backup pgembeding tar czf /backup/mysql_backup.tar.gz -C /data .
docker run --rm -v sherpaaiserver_pgdata:/data -v $(pwd)/backup_pg:/backup pgembeding tar czf /backup/pg_backup.tar.gz -C /data .
💡 Ejemplo para Sherpa AI Server
Primer volumen: sherpaaiserver_orchestrator-mysql-data
Contiene datos de la base de datos MySQL del orquestador
El archivo se guarda en
backup_mysql/mysql_backup.tar.gzSegundo volumen:sherpaaiserver_pgdataContiene datos de la base de datos PostgreSQL (si los hay)
El archivo de respaldo se guarda en
backup_pg/pg_backup.tar.gz
Para el proyecto en la carpeta myproject:
docker run --rm -v myproject_orchestrator-mysql-data:/data -v $(pwd)/backup_mysql:/backup pgembeding tar czf /backup/mysql_backup.tar.gz -C /data .
docker run --rm -v myproject_pgdata:/data -v $(pwd)/backup_pg:/backup pgembeding tar czf /backup/pg_backup.tar.gz -C /data .
💡 Ejemplo para myproject
Primer volumen: myproject_orchestrator-mysql-data
- De manera similar, pero con el prefijo
myproject_ - Utilice el nombre real de la carpeta de su proyecto
Segundo volumen: myproject_pgdata
- Datos de PostgreSQL con el prefijo correspondiente
💡 Qué hacen estos comandos
- Crean archivos comprimidos de todos los datos del volumen de Docker
- Los archivos se guardan en los directorios locales
backup_mysqlybackup_pg
Verificación de los respaldos creados:
# Verifique el tamaño de los archivos
ls -lh backup_mysql/ backup_pg/
# Verifique el contenido de los archivos
tar -tzf backup_mysql/mysql_backup.tar.gz | head -20
💡 Comentarios sobre la verificación de respaldos
ls -lh - muestra información detallada sobre los archivos
-l- formato largo-h- tamaños en un formato legible- Verifique que los archivos tengan un tamaño razonable
tar -tzf - muestra el contenido del archivo sin descomprimir
-t- lista el contenido-z- descomprimir usando gzip-f- especificar el nombre del archivo| head -20- muestra los primeros 20 archivos
Recomendación: Asegúrese de que los archivos no estén vacíos y contengan los archivos de base de datos esperados
Lógica principal de migración#
Descompresión y preparación de herramientas#
- Descomprimir archivos del cliente:
tar -xvzf "$(ls client_files_*.tgz | sort -V | tail -n 1)"
💡 Comentarios sobre la descompresión
tar -xvzf - descomprime el archivo
-x- extraer-v- salida detallada-z- descomprimir usando gzip-f- especificar el nombre del archivo
Subcomando para seleccionar el archivo:
ls client_files_*.tgz- encuentra todos los archivos comprimidos de client-filessort -V- ordena por versión (1.0, 1.1, 2.0, etc.)tail -n 1- toma el último (el más reciente) archivo
Resultado: Se crea una carpeta pgloader con herramientas de migración
- Ir al directorio pgloader:
cd pgloader
💡 Comentarios sobre el cambio de directorio
cd pgloader - cambia a la carpeta con herramientas de migración
- Todos los comandos posteriores se ejecutan desde este directorio
- Contiene scripts y configuraciones para pgloader
- Cargar la imagen de Docker pgloader:
./load_pgloader.sh
💡 Comentarios sobre la carga de la imagen
./load_pgloader.sh - script para cargar la imagen de Docker
- Importa
pgloader_image.taren el daemon de Docker local - Después de la ejecución, la imagen estará disponible como
pgloader:latest - Puede tardar unos minutos dependiendo del tamaño de la imagen
- Construir el contenedor para la migración:
./run.sh build
💡 Comentarios sobre la construcción del contenedor
./run.sh build - construye el contenedor de Docker para la migración
- Crea un contenedor basado en la imagen de pgloader cargada
- Configura todas las dependencias y herramientas necesarias
- Después de la construcción, el contenedor está listo para ejecutar la migración
Configuración de la configuración de migración#
Creación del archivo .env con parámetros de conexión:
Todas las contraseñas se pueden encontrar en el archivo oais/backend/config/config.ini.
cp .env.template .env
nano .env
# URI para la base de datos MySQL de origen
MIGRATE_MYSQL="mysql://user:pass@host:port/db"
# URI para la base de datos PostgreSQL de destino
MIGRATE_PG="postgres://user:pass@host:port/db"
# Parámetros para crear un volcado (opcional)
DUMP_PATH="/path/para/volcado"
DUMP_URI="mysql://user:pass@host/db"
# Parámetros para la restauración (opcional)
RESTORE_URI="postgres://user:pass@host/db"
RESTORE_PATH="/path/al/volcado.sql"
💡 Comentarios sobre las variables de entorno
MIGRATE_MYSQL - URI de conexión a la base de datos MySQL de origen
- Formato:
mysql://username:password@host:port/database - Utilizado por pgloader para leer datos
MIGRATE_PG - URI de conexión a la base de datos PostgreSQL de destino
- Formato:
postgres://username:password@host:port/database - Debe estar disponible para escribir datos
DUMP_ / RESTORE_ ** - parámetros opcionales para crear/restaurar volcados
- Útiles para depuración o migración por etapas
Ejemplo de configuración funcional:
# Para la base de datos MySQL
DUMP_URI="mysql://root:pass@91.206.149.183:3306/orchestrator"
MIGRATE_MYSQL="mysql://root:pass@91.206.149.183:3306/orchestrator"
# Para la base de datos PostgreSQL
MIGRATE_PG="postgres://postgres:pass@91.206.149.183:5432/postgres"
💡 Ejemplo de configuración
Parámetros de MySQL:
- Host:
91.206.149.183(servidor externo) - Puerto:
3306(estándar para MySQL) - Base:
orchestrator - Usuario:
root(con todos los permisos)
Parámetros de PostgreSQL:
- Host: el mismo servidor
- Puerto:
5432(estándar para PostgreSQL) - Base:
postgres(base de datos del sistema) - Usuario:
postgres(administrador)
Importante: Las contraseñas deben tomarse del config.ini existente
Importante: Asegúrese de que los puertos y hosts sean accesibles desde el contenedor de Docker.
Ejecución de la migración#
Ejecución de prueba (recomendada)
./run.sh dry-run
💡 Comentarios sobre la ejecución de prueba
./run.sh dry-run - simulación de la migración sin cambios
- Se conecta a ambas bases de datos
- Analiza la estructura y los datos
- Muestra el plan de migración y posibles problemas
- No realiza ningún cambio en PostgreSQL
Verifica:
- Disponibilidad y corrección de las conexiones
- Compatibilidad de tipos de datos MySQL → PostgreSQL
- Existencia de todas las tablas y relaciones
- Volumen de datos esperado para la transferencia
Recomendación: Siempre realice una ejecución de prueba antes de la migración real
Migración principal
./run.sh migrate
💡 Comentarios sobre la migración principal
./run.sh migrate - realiza la migración real de datos
- Crea el esquema
orchestratoren PostgreSQL - Transfiere la estructura de las tablas con conversión de tipos
- Copia todos los datos de MySQL a PostgreSQL
- Crea índices y restricciones de integridad
Etapas de ejecución:
- Verificación de conexiones y permisos
- Creación del esquema de la base de datos
- Migración de la estructura (tablas, tipos de datos)
- Transferencia de datos con optimización del rendimiento
- Creación de índices y restricciones
Importante: El proceso puede ser largo para bases de datos grandes
Opciones de migración:
--force- realizar la migración incluso si el esquema ya existe--build- reconstruir el contenedor antes de ejecutar--rmi- eliminar la imagen después de completar
Tiempo de ejecución: Depende del tamaño de la base de datos. Para bases de datos de hasta 10 GB - de 30 minutos a varias horas. Para bases de datos grandes - puede tardar varias horas o días.
Limpieza después de la migración#
# Eliminación de la imagen de Docker pgloader (opcional)
./run.sh rmi
# Regreso al directorio raíz del proyecto
cd ..
💡 Comentarios sobre la limpieza
./run.sh rmi - elimina la imagen de Docker pgloader
- Libera espacio en disco
- Elimina imágenes y contenedores temporales
- Opcional - se puede dejar para reutilización
cd .. - regresa al directorio padre
- Sale de la carpeta pgloader
- Regresa a la raíz del proyecto SherpaAIServer
Recomendación: Realice la limpieza solo después de una finalización y prueba exitosa de la migración
Copia de datos en nuevos volúmenes#
Después de una migración exitosa de la base de datos, puede ser necesario transferir el almacenamiento de archivos entre volúmenes de Docker.
Carga de la imagen de Alpine#
docker load -i alpine_image.tar
💡 Comentarios sobre la carga de Alpine
docker load -i - importa una imagen de Docker desde un archivo tar
-i- leer desde un archivo tar guardado localmente- Carga la imagen en el daemon de Docker local
Alpine Linux - distribución de Linux minimalista
- Tamaño de la imagen ~5-10 MB (en comparación con Ubuntu ~100+ MB)
- Contiene solo las herramientas necesarias (cp, ls, tar, etc.)
- Ideal para operaciones con archivos en contenedores
Uso: Para copiar datos entre volúmenes de Docker
Creación de un nuevo volumen#
docker volume create aiserver-storage
💡 Comentarios sobre la creación de un volumen
docker volume create - crea un nuevo volumen de Docker nombrado
aiserver-storage- nombre para el nuevo volumen- El volumen se crea vacío y listo para usar
Características del volumen:
- Gestionado automáticamente por Docker
- Accesible para todos los contenedores en el host
- Se conserva al reiniciar el daemon de Docker
- Soporta operaciones de snapshot y backup
Propósito: Almacenamiento de archivos de Sherpa AIServer (descargas, caché, logs, etc.)
Definición de volúmenes actuales#
Encontrar nombres de volúmenes utilizados:
docker volume list
💡 Redefinición de volúmenes
docker volume list - verificación reiterada de la lista de volúmenes
- Asegurarse de que todos los volúmenes estén disponibles
- Verificar la corrección de los nombres antes de copiar datos
Importante: Comparar con los resultados de la primera verificación
- Asegúrese de que los volúmenes no hayan sido eliminados accidentalmente
- Verifique la disponibilidad de todos los datos necesarios
Ejemplo de salida (los nombres dependen del nombre de la carpeta del proyecto):
DRIVER VOLUME NAME
local sherpaaiserver_orchestrator-mysql-data
local sherpaaiserver_pgdata
local sherpaaiserver_storage
O, si la carpeta del proyecto se llama de otra manera (por ejemplo, myproject):
DRIVER VOLUME NAME
local myproject_orchestrator-mysql-data
local myproject_pgdata
local myproject_storage
Transferencia de datos entre volúmenes#
Definir la fuente de datos:
En el siguiente comando, reemplace STORAGE_DATA con el nombre de su volumen actual para almacenar datos (por ejemplo, sherpaaiserver_storage):
docker run --rm \
-v STORAGE_DATA:/from \
-v aiserver-storage:/to \
alpine ash -c "cp -av /from/. /to/"
💡 Comentarios sobre la transferencia de datos
docker run --rm - inicia un contenedor temporal de Alpine
--rm- el contenedor se eliminará después de la ejecución
Montaje de volúmenes:
-v STORAGE_DATA:/from- el volumen fuente se monta en /from-v aiserver-storage:/to- el volumen de destino se monta en /to
ash -c - ejecuta un comando en el shell de Alpine
ash- Almquist shell (ligero)-c- ejecutar el comando
cp -av /from/. /to/ - copia todos los archivos
-a- modo de archivo (mantiene permisos, propietarios, marcas de tiempo)-v- salida detallada/from/.- copia el contenido, no la carpeta /from/to/- en el directorio de destino
Ejemplo de reemplazo: STORAGE_DATA → sherpaaiserver_storage
Verificación del éxito de la copia:
# Verificar el contenido del nuevo volumen
docker run --rm -v aiserver-storage:/data alpine ls -la /data
# Comparar tamaños (aproximados)
docker run --rm -v STORAGE_DATA:/data alpine du -sh /data
docker run --rm -v aiserver-storage:/data alpine du -sh /data
💡 Comentarios sobre la verificación de la copia
docker run --rm -v aiserver-storage:/data alpine ls -la /data
- Verifica el contenido del nuevo volumen
ls -lamuestra todos los archivos con permisos y tamaños- Asegurarse de que los archivos se hayan copiado correctamente
docker run --rm -v STORAGE_DATA:/data alpine du -sh /data
- Verifica el tamaño del volumen fuente
du -sh- uso de disco, resumen, formato legible por humanos- Comparamos tamaños para verificar la integridad de la copia
Expectativas:
- La cantidad de archivos debe coincidir
- Los tamaños deben ser aproximadamente iguales
- La estructura de directorios debe ser idéntica
Si los tamaños difieren: Verifique los registros de copia en busca de errores
Migración de PostgreSQL 16 a la versión 17#
Preparación para la actualización de la versión de PostgreSQL#
Acciones preliminares:
- Dejar la base de datos antigua en ejecución - el contenedor
pgembedingdebe seguir funcionando - Descomprimir los nuevos archivos de cliente - el archivo debe contener el
docker-compose.ymly el.envactualizados - Transferir la configuración - copiar los parámetros de conexión de la versión antigua
/opt/SherpaAIServer/oais/backend/config/config.inial nuevo.env - Cambiar el puerto - establecer temporalmente el puerto 5433 para el nuevo PostgreSQL, para evitar conflictos
Descompresión del archivo con los archivos de cliente#
# Encuentre y descomprima el archivo (se selecciona automáticamente la versión más reciente)
tar -xvzf "$(ls client_files_*.tgz | sort -V | tail -n 1)"
💡 Qué hace este comando
ls client_files_*.tgz- encuentra todos los archivos de archivosort -V- ordena versiones de forma natural (1.0 < 1.1 < 1.10)tail -n 1- selecciona el archivo más recientetar -xvzf- descomprime el archivo mostrando el contenido
Resultado esperado: Se creará un directorio sh_scripts/ con scripts ejecutables y otros archivos necesarios.
Preparación de scripts para ejecución#
# Cambie al directorio con los scripts
cd sh_scripts/
# Haga que todos los scripts sean ejecutables
chmod +x *.sh
# Regrese al directorio raíz del proyecto
cd ..
💡 Qué hacen estos comandos
chmod +x *.sh- establece permisos de ejecución para todos los scripts de shell- Esto es necesario para ejecutar los scripts en las siguientes etapas de la instalación
Estructura del archivo descomprimido:#
Después de descomprimir, debe ver los siguientes archivos y directorios:
sh_scripts/- directorio con scripts de instalacióndownload_all_latest_docker_images.sh- script para descargar imágenes de Dockerload_all_docker_images.sh- script para cargar imágenes en Dockerextract_models.sh- script para descomprimir modelos de IAextract_llama.sh- script para descomprimir modelos LLM
docker-compose.yml- configuración de Docker Compose para la instalación del cliente.env- archivo con variables de entorno para configurar el sistema
Carga de imágenes de Docker#
# Ejecute el script de carga de imágenes de Docker
sudo ./sh_scripts/load_all_docker_images.sh
💡 Qué hace el script
- Carga todas las imágenes de Docker desde los archivos .tar.gz descargados
- Importa las imágenes en el registro local de Docker
- Verifica el éxito de la carga
Descompresión de modelos de IA#
# Ejecute el script de descompresión de modelos principales
sudo ./sh_scripts/extract_models.sh
💡 Qué hace el script
- Descomprime el modelo Whisper para reconocimiento de voz
- Descomprime el modelo BGE Reranker para mejorar la búsqueda
- Descomprime modelos para generación de embeddings
- Crea los directorios necesarios
- Verifica el éxito de la descompresión
# Ejecute el script de descompresión del modelo LLM
sudo ./sh_scripts/extract_llama.sh
💡 Qué hace el script
- Descomprime el modelo Llama 3 para modelado de lenguaje
- Elimina el prefijo
model-store/de las rutas de los archivos - Coloca los archivos directamente en el directorio de modelos
- Verifica el contenido después de la descompresión
Estructura de directorios después de la descompresión (aproximada):```#
./whisper/ └── models/ ├── base.pt └── ...
./bge_reranker/ └── models/ └── bge-reranker-large/ ├── config.json ├── model.bin └── ...
./embed-server/app/ └── model-store/ └── sentence-transformers/ └── paraphrase-multilingual-MiniLM-L12-v2/ ├── config.json ├── pytorch_model.bin └── ...
./llm-server/models/ ├── meta-llama/ │ └── Meta-Llama-3-8B-Instruct/ │ ├── config.json │ ├── model-00001-of-00004.safetensors │ ├── model-00002-of-00004.safetensors │ └── ... └── tokenizer.json
#### Ejecución de una nueva versión de PostgreSQL
```bash
docker compose up -d
💡 Comentarios sobre la ejecución de una nueva versión
docker compose up -d - inicia los servicios en segundo plano
-d- modo desconectado (ejecución en segundo plano)- Inicia todos los servicios del docker-compose.yml
- Incluye PostgreSQL 17 en el contenedor aiserver-pg
Importante:
- La base de datos antigua debe seguir funcionando
- La nueva versión se inicia en otro puerto (5433)
- El proceso de inicialización puede tardar varios minutos
Monitoreo de la ejecución:
# Seguir los logs de inicialización
docker logs aiserver
# Verificar el estado de los contenedores
docker ps | grep aiserver
💡 Comentarios sobre el monitoreo
docker logs aiserver - muestra los logs del contenedor
- Sigue el proceso de inicialización de PostgreSQL
- Busca mensajes sobre el inicio exitoso y la aplicación de migraciones
- Se puede interrumpir con Ctrl+C
docker ps | grep aiserver - verifica el estado
docker ps- muestra los contenedores en ejecucióngrep aiserver- filtra por nombre- Debe mostrar el contenedor aiserver-pg en estado Up
Detener servicios para la transferencia de datos#
Detener todos los servicios excepto la nueva base de datos:
docker-compose stop aiserver aiserver-code_interpreter aiserver-llm-server aiserver-embed aiserver-whisper aiserver-bge_reranker
docker compose stop aiserver aiserver-code_interpreter aiserver-llm-server aiserver-embed aiserver-whisper aiserver-bge_reranker
💡 Comentarios sobre la detención de servicios
docker compose stop - detiene los servicios especificados
- Se ejecutan ambas versiones de la sintaxis por compatibilidad
- Se detienen todos los servicios de Sherpa AIServer excepto la base de datos
Servicios detenidos:
aiserver- servidor web principalaiserver-code_interpreter- intérprete de códigoaiserver-llm-server- modelo de lenguajeaiserver-embed- servicio de embeddingsaiserver-whisper- servicio de reconocimiento de vozaiserver-bge_reranker- servicio de ranking
Resultado: Solo aiserver-pg (nueva PostgreSQL) sigue funcionando
Transferencia de datos entre versiones#
Ejecutar la secuencia de comandos para la transferencia de datos:
# 1. Crear un volcado de la base de datos antigua
docker exec -t postgres pg_dump -U postgres -d postgres -Fc -f /tmp/postgres.dump && \
# 2. Copiar el volcado al host
docker cp postgres:/tmp/postgres.dump ./postgres.dump && \
# 3. Eliminar la base de datos antigua en el nuevo contenedor
docker exec -it aiserver-pg psql -U postgres -d template1 -c "DROP DATABASE IF EXISTS postgres;" && \
# 4. Crear una nueva base de datos
docker exec -it aiserver-pg psql -U postgres -d template1 -c "CREATE DATABASE postgres;" && \
# 5. Crear las extensiones necesarias
docker exec -it aiserver-pg psql -U postgres -d postgres -c "CREATE EXTENSION IF NOT EXISTS embedding;" && \
docker exec -it aiserver-pg psql -U postgres -d postgres -c "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";" && \
# 6. Copiar el volcado al nuevo contenedor
docker cp ./postgres.dump aiserver-pg:/tmp/postgres.dump && \
# 7. Restaurar los datos
docker exec -t aiserver-pg pg_restore -U postgres -d postgres /tmp/postgres.dump
💡 Comentarios sobre la transferencia entre versiones de PostgreSQL
Paso 1: Crear un volcado de la base de datos antigua
docker exec -t postgres- ejecuta el comando en el contenedor postgres (versión 16)pg_dump -U postgres -d postgres -Fc- crea un volcado en formato especial-Fc- formato especial comprimido (mejor para bases de datos grandes)- Se guarda en
/tmp/postgres.dumpdentro del contenedor
Paso 2: Copiar el volcado al host
docker cp postgres:/tmp/postgres.dump ./postgres.dump- Transfiere el volcado del contenedor al disco local
- Necesario para la transferencia entre contenedores
Paso 3: Eliminar la base de datos antigua en el nuevo contenedor
- Se conecta a la base de datos del sistema template1
- Elimina la base de datos existente postgres (si existe)
Paso 4: Crear una nueva base de datos
- Crea una base de datos postgres limpia en el contenedor aiserver-pg
Paso 5: Crear extensiones
embedding- extensión para embeddings vectorialesuuid-ossp- generación de UUID (necesaria para algunas tablas)
Paso 6: Copiar el volcado al nuevo contenedor
- Operación inversa de copia
- Coloca el volcado en el contenedor aiserver-pg
Paso 7: Restaurar los datos
pg_restore- restaura desde el volcado en formato especial-t- asigna TTY para el progreso- Crea automáticamente tablas, índices y datos
Validación de los resultados de la migración#
Verificación de la correcta transferencia de datos#
Verificaciones básicas:
# Conectarse a la nueva base de datos
docker exec -it aiserver-pg psql -U postgres -d postgres
# Verificar el número de tablas
\dt orchestrator.*
# Verificar el número de registros en las tablas principales
SELECT schemaname, tablename, n_tup_ins AS rows
FROM pg_stat_user_tables
WHERE schemaname = 'orchestrator'
ORDER BY n_tup_ins DESC;
# Verificar la existencia de extensiones
\dx
# Salir de psql
\q
💡 Comentarios sobre las verificaciones básicas
docker exec -it aiserver-pg psql -U postgres -d postgres
- Se conecta a PostgreSQL en modo interactivo
-it- terminal interactivo-U postgres- usuario postgres-d postgres- base de datos postgres
\dt orchestrator.* - muestra todas las tablas en el esquema orchestrator
\dt- lista de tablasorchestrator.*- filtro por esquema
SELECT ... FROM pg_stat_user_tables - estadísticas sobre las tablas
n_tup_ins- número de filas insertadas (número aproximado de registros)- La ordenación descendente muestra las tablas más grandes
\dx - muestra las extensiones instaladas
- Deben ser visibles
embeddingyuuid-ossp
\q - salir de psql
Pruebas de funcionalidad#
- Iniciar los servicios principales de Sherpa AI Server
- Realizar consultas de prueba a la API
- Verificar el funcionamiento de la interfaz web
- Realizar operaciones básicas con los datos
Diagnóstico y resolución de problemas#
Errores comunes y soluciones#
Si se producen errores de migración, comuníquese con el soporte técnico, mientras tanto, puede regresar al antiguo directorio /opt/SherpaAIServer y ejecutar con la configuración anterior Sherpa AI Server
"Heap exhausted" o falta de memoria
Solución: Aumentar el límite de memoria para pgloader
export SBCL_DYNAMIC_SPACE_SIZE=8192
Error de conexión a la base de datos
Verificaciones:
- Verificar la disponibilidad de puertos: telnet host port
- Verificar la validez de las credenciales
- Verificar la conectividad de red de los contenedores
Violación de la integridad de los datos
Acciones:
1. Verificar los logs de pgloader: cat migrate.log
2. Comparar el número de registros en la base de datos fuente y destino
3. Verificar la existencia de todas las tablas e índices
Interrupción de la migración
Acciones:
- No reiniciar la migración
- Contactar al soporte técnico con los logs
- Proporcionar: migrate.log, configuración .env, tamaño de la base de datos
💡 Comentarios sobre el monitoreo de la migración
tail -f migrate.log - sigue los logs en tiempo real
-f- seguir (se actualiza al agregar nuevas líneas)- Muestra el progreso de la migración de pgloader
- Busca errores o advertencias
docker stats - monitorea el uso de recursos de los contenedores
- Muestra CPU, memoria, red, disco para todos los contenedores
- Útil para rastrear la carga en el sistema
- Interrumpir con Ctrl+C
* Cuenta el número total de registros en todas las tablas del orchestrator
* `watch` - utilidad para ejecutar comandos periódicamente
* `-n 30` - intervalo de 30 segundos
**Uso:** Mantener estos comandos en terminales separados durante la migración
</details>
### Finalización de la migración
**Después de completar con éxito todos los pasos:**
1. **Iniciar todos los servicios de Sherpa AI Server**
2. **Realizar pruebas finales del sistema**
3. **Eliminar archivos temporales y contenedores antiguos** (si es necesario)
> **Recomendación:** Guarde los registros de migración y los archivos de configuración para futuras referencias.