MySQL → PostgreSQL Migration Guide#
Introduction#
IMPORTANT! IF your AI Server version is 2.0.0 or lower, then your version uses both MySQL and PostgreSQL version 16 simultaneously. In the new version 2.1.0+, only PostgreSQL version 17 is used.
You need to migrate from MySQL to PostgreSQL, as well as perform data migration from PostgreSQL version 16 to version 17.
This guide describes the process of migrating the Sherpa AI Server database from MySQL to PostgreSQL. The migration includes data transfer, configuration updates, and transitioning to a new database management system.
ATTENTION! If you have the option to ABANDON DATA (IF YOU DO NOT NEED IT), we recommend skipping this guide and proceeding to the installation guide from scratch:
System Requirements#
Minimum requirements for migration:#
- Free disk space: at least 2x the size of the database (for source data + migration)
- RAM: at least 4 GB RAM for pgloader
- Docker: version 20.10+ with Docker Compose support
- Network connection: stable connection to databases
Preliminary Checks#
Before starting the migration, perform the following checks:
# Check available disk space
df -h
# Check available RAM
free -h
# Check Docker status
docker --version
docker compose version
# Check database availability
docker ps | grep -E "(mysql|postgres)"
💡 Comments on checks
df -h - shows disk space usage in human-readable format
- Ensure that free space is at least 2 times larger than the size of your database
free -h - shows information about RAM
- At least 4 GB RAM is required for pgloader
- Insufficient memory may cause migration to fail with "Heap exhausted" error
docker --version - checks the Docker version
- Docker 20.10+ is required for all features to work correctly
docker compose version - checks the Docker Compose version
- Ensure that compose supports modern syntax
docker ps - shows running containers
- mysql/postgres containers should be visible for data access
Preparing for Migration#
Downloading Required Files#
If the environment is closed, you need to download the INSTALLATION ARCHIVES in advance and additionally the following files:
curl -fSL -OJ https://sherparpa.ru/downloads/private/SherpaAIServer/pgloader_image.tar
curl -fSL -OJ https://sherparpa.ru/downloads/private/SherpaAIServer/alpine_image.tar
💡 Comments on downloading files
curl -fSL -OJ - downloads files from the server
-f- quietly exits on server errors-S- shows errors even when using -f-L- follows redirects-O- saves the file with the name from the server-J- uses the filename provided by the server
pgloader_image.tar - Docker image with the pgloader tool for data transfer alpine_image.tar - lightweight Linux image for file operations
Create the directory /opt/SherpaAIServerNew and place all downloaded archives AND FILES FROM THE INSTALLATION GUIDE into it:
# Create a new directory for migration
sudo mkdir -p /opt/SherpaAIServerNew
# Move downloaded files to the new directory (and files from the download preparation)
sudo mv pgloader_image.tar /opt/SherpaAIServerNew/
sudo mv alpine_image.tar /opt/SherpaAIServerNew/
💡 Comments on directory preparation
sudo mkdir -p - creates a directory with parent folders
-pprevents an error if the directory already exists
sudo mv - moves files to the new directory
- Moving to
/opt/SherpaAIServerNewisolates migration files from the current installation
What is being downloaded:
pgloader_image.tar- Docker image with pgloader and necessary toolsalpine_image.tar- lightweight Alpine Linux image for working with volumes (does not affect your current operating system)
Stopping Services#
- Stop containers except for databases:
# go to the old directory
cd /opt/SherpaAIServer/
docker compose stop orchestrator embed nginx vllm
docker-compose stop orchestrator embed nginx vllm
# go to the new directory
cd /opt/SherpaAIServerNew/
💡 Comments on stopping services
docker compose stop - stops specified services without removing them
orchestrator- main orchestration serviceembed- service for working with embeddingsnginx- web server and proxyvllm- language model service
Two commands - both syntax versions are executed for compatibility Remaining services - pgembeding (PostgreSQL with embeddings) and orchestrator-db (MySQL) should continue to run for data access
Why we stop services: During migration, any changes to the database must be excluded to ensure data consistency.
Note: There is no need to delete containers, just stop them. pgembeding and orchestrator-db should remain.
Creating Backups#
Determining volume names:
First, find the correct volume names in your system:
docker volume list
💡 Comments on determining volumes
docker volume list - shows all Docker volumes in the system
DRIVER- type of driver (usually local)VOLUME NAME- unique name of the volume
Name prefixes - depend on the project folder name:
- For the folder
SherpaAIServer→ prefixsherpaaiserver_ - For the folder
myproject→ prefixmyproject_
Main volumes:
*orchestrator-mysql-data- MySQL database data*pgdata- PostgreSQL database data*storage- file storage
Example output:
DRIVER VOLUME NAME
local sherpaaiserver_orchestrator-mysql-data
local sherpaaiserver_pgdata
local sherpaaiserver_storage
Creating volume backups:
Replace volume names with the actual ones from your list:
# Backup MySQL data (replace VOLUME_NAME with the actual name)
docker run --rm -v VOLUME_NAME:/data -v $(pwd)/backup_mysql:/backup pgembeding tar czf /backup/mysql_backup.tar.gz -C /data .
# Backup PostgreSQL data (if any) (replace VOLUME_NAME with the actual name with postgres)
docker run --rm -v VOLUME_NAME:/data -v $(pwd)/backup_pg:/backup pgembeding tar czf /backup/pg_backup.tar.gz -C /data .
💡 Comments on creating backups
docker run --rm - runs a container and automatically removes it after execution
--rmprevents accumulation of stopped containers
Mounting volumes:
-v VOLUME_NAME:/data- mounts Docker volume in the container-v $(pwd)/backup_mysql:/backup- mounts a local folder to save the archive
tar czf - creates a compressed archive
c- create archivez- compress using gzipf- specify filename-C /data .- changes directory to /data before archiving
pgembeding - uses the existing PostgreSQL image with tools
Examples with specific names:
For a project in the SherpaAIServer folder:
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 .
💡 Example for Sherpa AI Server
First volume: sherpaaiserver_orchestrator-mysql-data
- Contains MySQL data of the orchestrator database
- Archive is saved in
backup_mysql/mysql_backup.tar.gz
Second volume: sherpaaiserver_pgdata
- Contains PostgreSQL data (if any)
- Archive is saved in
backup_pg/pg_backup.tar.gz
For a project in the myproject folder:
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 .
💡 Example for myproject
First volume: myproject_orchestrator-mysql-data
- Similar, but with the prefix
myproject_ - Use the actual name of your project folder
Second volume: myproject_pgdata
- PostgreSQL data with the corresponding prefix
💡 What these commands do
- Create compressed archives of all data from Docker volumes
- Archives are saved in local directories
backup_mysqlandbackup_pg
Checking created backups:
# Check the size of the archives
ls -lh backup_mysql/ backup_pg/
# Check the contents of the archives
tar -tzf backup_mysql/mysql_backup.tar.gz | head -20
💡 Comments on checking backups
ls -lh - shows detailed information about files
-l- long format-h- sizes in human-readable form- Ensure that the archives have reasonable sizes
tar -tzf - shows the contents of the archive without unpacking
-t- list contents-z- unpack using gzip-f- specify filename| head -20- shows the first 20 files
Recommendation: Ensure that the archives are not empty and contain the expected database files
Main Migration Logic#
Unpacking and Preparing Tools#
- Unpack client files:
tar -xvzf "$(ls client_files_*.tgz | sort -V | tail -n 1)"
💡 Comments on unpacking
tar -xvzf - unpacks the archive
-x- extract-v- verbose output-z- unpack using gzip-f- specify filename
Subcommand for file selection:
ls client_files_*.tgz- finds all client-files archivessort -V- sorts by version (1.0, 1.1, 2.0, etc.)tail -n 1- takes the last (most recent) file
Result: A folder pgloader is created with migration tools
- Go to the pgloader directory:
cd pgloader
💡 Comments on changing directory
cd pgloader - navigates to the folder with migration tools
- All subsequent commands are executed from this directory
- Contains scripts and configurations for pgloader
- Load the pgloader Docker image:
./load_pgloader.sh
💡 Comments on loading the image
./load_pgloader.sh - script to load the Docker image
- Imports
pgloader_image.tarinto the local Docker daemon - After execution, the image becomes available as
pgloader:latest - May take a few minutes depending on the size of the image
- Build the migration container:
./run.sh build
💡 Comments on building the container
./run.sh build - builds the Docker container for migration
- Creates a container based on the loaded pgloader image
- Sets up all necessary dependencies and tools
- After building, the container is ready to perform the migration
Configuring Migration Settings#
Creating a .env file with connection parameters:
All passwords can be found in the file oais/backend/config/config.ini.
cp .env.template .env
nano .env
# URI for the source MySQL database
MIGRATE_MYSQL="mysql://user:pass@host:port/db"
# URI for the target PostgreSQL database
MIGRATE_PG="postgres://user:pass@host:port/db"
# Parameters for creating a dump (optional)
DUMP_PATH="/path/for/dump"
DUMP_URI="mysql://user:pass@host/db"
# Parameters for restoration (optional)
RESTORE_URI="postgres://user:pass@host/db"
RESTORE_PATH="/path/to/dump.sql"
💡 Comments on environment variables
MIGRATE_MYSQL - URI for connecting to the source MySQL database
- Format:
mysql://username:password@host:port/database - Used by pgloader to read data
MIGRATE_PG - URI for connecting to the target PostgreSQL database
- Format:
postgres://username:password@host:port/database - Must be accessible for writing data
DUMP_ / RESTORE_ ** - optional parameters for creating/restoring dumps
- Useful for debugging or phased migration
Example working configuration:
# For MySQL database
DUMP_URI="mysql://root:pass@91.206.149.183:3306/orchestrator"
MIGRATE_MYSQL="mysql://root:pass@91.206.149.183:3306/orchestrator"
# For PostgreSQL database
MIGRATE_PG="postgres://postgres:pass@91.206.149.183:5432/postgres"
💡 Example configuration
MySQL parameters:
- Host:
91.206.149.183(external server) - Port:
3306(standard for MySQL) - Database:
orchestrator - User:
root(with full rights)
PostgreSQL parameters:
- Host: the same server
- Port:
5432(standard for PostgreSQL) - Database:
postgres(system database) - User:
postgres(administrator)
Important: Passwords should be taken from the existing config.ini
Important: Ensure that ports and hosts are accessible from the Docker container.
Executing Migration#
Test run (recommended)
./run.sh dry-run
💡 Comments on test run
./run.sh dry-run - simulates migration without making changes
- Connects to both databases
- Analyzes structure and data
- Shows migration plan and potential issues
- Does not make any changes to PostgreSQL
Checks:
- Availability and correctness of connections
- Compatibility of data types MySQL → PostgreSQL
- Presence of all tables and relationships
- Expected volume of data to be transferred
Recommendation: Always perform a dry-run before the actual migration
Main migration
./run.sh migrate
💡 Comments on main migration
./run.sh migrate - performs the actual data migration
- Creates the
orchestratorschema in PostgreSQL - Transfers the table structure with type conversion
- Copies all data from MySQL to PostgreSQL
- Creates indexes and integrity constraints
Execution steps:
- Checking connections and access rights
- Creating the database schema
- Migrating structure (tables, data types)
- Transferring data with performance optimization
- Creating indexes and constraints
Important: The process may take a long time for large databases
Migration options:
--force- perform migration even if the schema already exists--build- rebuild the container before running--rmi- remove the image after completion
Execution time: Depends on the size of the database. For databases up to 10 GB - from 30 minutes to several hours. For larger databases - it may take several hours or days.
Cleanup After Migration#
# Remove pgloader Docker image (optional)
./run.sh rmi
# Return to the root project directory
cd ..
💡 Comments on cleanup
./run.sh rmi - removes the pgloader Docker image
- Frees up disk space
- Removes temporary images and containers
- Optional - can be left for reuse
cd .. - returns to the parent directory
- Exits the pgloader folder
- Returns to the root of the SherpaAIServer project
Recommendation: Perform cleanup only after successful completion and testing of the migration
Copying Data to New Volumes#
After successfully migrating the database, it may be necessary to transfer the file storage between Docker volumes.
Loading the Alpine Image#
docker load -i alpine_image.tar
💡 Comments on loading Alpine
docker load -i - imports a Docker image from a tar archive
-i- read from a locally saved tar archive- Loads the image into the local Docker daemon
Alpine Linux - a minimalist Linux distribution
- Image size ~5-10 MB (compared to Ubuntu ~100+ MB)
- Contains only necessary tools (cp, ls, tar, etc.)
- Ideal for file operations in containers
Usage: For copying data between Docker volumes
Creating a New Volume#
docker volume create aiserver-storage
💡 Comments on creating a volume
docker volume create - creates a new named Docker volume
aiserver-storage- name for the new volume- Volume is created empty and ready for use
Volume characteristics:
- Managed by Docker automatically
- Available to all containers on the host
- Preserved when the Docker daemon is restarted
- Supports snapshot and backup operations
Purpose: Storage for Sherpa AIServer files (uploads, cache, logs, etc.)
Determining Current Volumes#
Find the names of used volumes:
docker volume list
💡 Rechecking volumes
docker volume list - rechecks the list of volumes
- Ensures that all volumes are available
- Checks the correctness of names before copying data
Important: Compare with the results of the first check
- Ensure that volumes have not been accidentally deleted
- Check the availability of all necessary data
Example output (names depend on the project folder name):
DRIVER VOLUME NAME
local sherpaaiserver_orchestrator-mysql-data
local sherpaaiserver_pgdata
local sherpaaiserver_storage
Or, if the project folder is named differently (for example, myproject):
DRIVER VOLUME NAME
local myproject_orchestrator-mysql-data
local myproject_pgdata
local myproject_storage
Transferring Data Between Volumes#
Determine the data source:
In the command below, replace STORAGE_DATA with the name of your current volume for data storage (for example, sherpaaiserver_storage):
docker run --rm \
-v STORAGE_DATA:/from \
-v aiserver-storage:/to \
alpine ash -c "cp -av /from/. /to/"
💡 Comments on data transfer
docker run --rm - runs a temporary Alpine container
--rm- the container will be removed after execution
Mounting volumes:
-v STORAGE_DATA:/from- source volume is mounted to /from-v aiserver-storage:/to- target volume is mounted to /to
ash -c - executes the command in the Alpine shell
ash- Almquist shell (lightweight)-c- execute the command
cp -av /from/. /to/ - copies all files
-a- archive mode (preserves permissions, owners, timestamps)-v- verbose output/from/.- copies the contents, not the /from folder itself/to/- to the target directory
Example replacement: STORAGE_DATA → sherpaaiserver_storage
Checking the success of the copy:
# Check the contents of the new volume
docker run --rm -v aiserver-storage:/data alpine ls -la /data
# Compare sizes (approximate)
docker run --rm -v STORAGE_DATA:/data alpine du -sh /data
docker run --rm -v aiserver-storage:/data alpine du -sh /data
💡 Comments on checking the copy
docker run --rm -v aiserver-storage:/data alpine ls -la /data
- Checks the contents of the new volume
ls -lashows all files with permissions and sizes- Ensures that files have been copied correctly
docker run --rm -v STORAGE_DATA:/data alpine du -sh /data
- Checks the size of the source volume
du -sh- disk usage summary, human-readable format- Compares sizes to check the completeness of the copy
Expectations:
- The number of files should match
- Sizes should be approximately equal
- The directory structure should be identical
If sizes differ: Check the copy logs for errors
Migration from PostgreSQL 16 to 17#
Preparing for PostgreSQL Version Upgrade#
Preliminary actions:
- Keep the old database running - the
pgembedingcontainer should continue to run - Unpack new client-files - the archive should contain updated
docker-compose.ymland.env - Transfer configuration - copy connection parameters from the old version
/opt/SherpaAIServer/oais/backend/config/config.inito the new.env - Change the port - temporarily set port 5433 for the new PostgreSQL to avoid conflict
Unpacking the Archive with Client Files#
# Find and unpack the archive (the most recent version is automatically selected)
tar -xvzf "$(ls client_files_*.tgz | sort -V | tail -n 1)"
💡 What this command does
ls client_files_*.tgz- finds all archive filessort -V- sorts versions naturally (1.0 < 1.1 < 1.10)tail -n 1- selects the most recent filetar -xvzf- unpacks the archive with output of contents
Expected result: A directory sh_scripts/ will be created with executable scripts and other necessary files.
Preparing Scripts for Execution#
# Go to the directory with scripts
cd sh_scripts/
# Make all scripts executable
chmod +x *.sh
# Return to the root project directory
cd ..
💡 What these commands do
chmod +x *.sh- sets execution rights for all shell scripts- This is necessary for running scripts in the following installation stages
Structure of the Unpacked Archive:#
After unpacking, you should see the following files and directories:
sh_scripts/- directory with installation scriptsdownload_all_latest_docker_images.sh- script for downloading Docker imagesload_all_docker_images.sh- script for loading images into Dockerextract_models.sh- script for unpacking AI modelsextract_llama.sh- script for unpacking LLM models
docker-compose.yml- Docker Compose configuration for client installation.env- file with environment variables for system configuration
Loading Docker Images#
# Run the script to load Docker images
sudo ./sh_scripts/load_all_docker_images.sh
💡 What the script does
- Loads all Docker images from downloaded .tar.gz files
- Imports images into the local Docker registry
- Checks the success of the loading
Unpacking AI Models#
# Run the script to unpack the main models
sudo ./sh_scripts/extract_models.sh
💡 What the script does
- Unpacks the Whisper model for speech recognition
- Unpacks the BGE Reranker model for improved search
- Unpacks models for generating embeddings
- Creates necessary directories
- Checks the success of the unpacking
# Run the script to unpack the LLM model
sudo ./sh_scripts/extract_llama.sh
💡 What the script does
- Unpacks the Llama 3 model for language modeling
- Removes the
model-store/prefix from file paths - Places files directly into the models directory
- Checks the contents after unpacking
Directory Structure After Unpacking (approximate):#
./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
Starting the New Version of PostgreSQL#
docker compose up -d
💡 Comments on starting the new version
docker compose up -d - starts services in the background
-d- detached mode (runs in the background)- Starts all services from docker-compose.yml
- Includes PostgreSQL 17 in the aiserver-pg container
Important:
- The old database should continue to run
- The new version runs on a different port (5433)
- The initialization process may take several minutes
Monitoring the Startup:
# Monitor initialization logs
docker logs aiserver
# Check the status of containers
docker ps | grep aiserver
💡 Comments on monitoring
docker logs aiserver - shows container logs
- Monitors the PostgreSQL initialization process
- Looks for messages about successful startup and migration applications
- Can be interrupted with Ctrl+C
docker ps | grep aiserver - checks status
docker ps- shows running containersgrep aiserver- filters by name- Should show the aiserver-pg container in the Up state
Stopping Services to Transfer Data#
Stop all services except for the new database:
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
💡 Comments on stopping services
docker compose stop - stops specified services
- Both syntax versions are executed for compatibility
- Stops all Sherpa AIServer services except the database
Stopped services:
aiserver- main web serveraiserver-code_interpreter- code interpreteraiserver-llm-server- language modelaiserver-embed- embedding serviceaiserver-whisper- speech recognition serviceaiserver-bge_reranker- ranking service
Result: Only aiserver-pg (new PostgreSQL) continues to run
Transferring Data Between Versions#
Execute the following sequence of commands to transfer data:
# 1. Create a dump from the old database
docker exec -t postgres pg_dump -U postgres -d postgres -Fc -f /tmp/postgres.dump && \
# 2. Copy the dump to the host
docker cp postgres:/tmp/postgres.dump ./postgres.dump && \
# 3. Delete the old database in the new container
docker exec -it aiserver-pg psql -U postgres -d template1 -c "DROP DATABASE IF EXISTS postgres;" && \
# 4. Create a new database
docker exec -it aiserver-pg psql -U postgres -d template1 -c "CREATE DATABASE postgres;" && \
# 5. Create necessary extensions
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. Copy the dump to the new container
docker cp ./postgres.dump aiserver-pg:/tmp/postgres.dump && \
# 7. Restore the data
docker exec -t aiserver-pg pg_restore -U postgres -d postgres /tmp/postgres.dump
💡 Comments on transferring between PostgreSQL versions
Step 1: Create a dump from the old database
docker exec -t postgres- executes a command in the postgres container (version 16)pg_dump -U postgres -d postgres -Fc- creates a special format dump-Fc- compressed special format (better for large databases)- Saved in
/tmp/postgres.dumpinside the container
Step 2: Copy the dump to the host
docker cp postgres:/tmp/postgres.dump ./postgres.dump- Transfers the dump from the container to the local disk
- Necessary for transferring between containers
Step 3: Delete the old database in the new container
- Connects to the system database template1
- Deletes the existing postgres database (if any)
Step 4: Create a new database
- Creates a clean postgres database in the aiserver-pg container
Step 5: Create extensions
embedding- extension for vector embeddingsuuid-ossp- UUID generation (needed for some tables)
Step 6: Copy the dump to the new container
- Reverse copy operation
- Places the dump in the aiserver-pg container
Step 7: Restore the data
pg_restore- restores from the special format dump-t- allocates TTY for progress- Automatically creates tables, indexes, and data
Validating Migration Results#
Checking the Correctness of Data Transfer#
Basic checks:
# Connect to the new database
docker exec -it aiserver-pg psql -U postgres -d postgres
# Check the number of tables
\dt orchestrator.*
# Check the number of records in main tables
SELECT schemaname, tablename, n_tup_ins AS rows
FROM pg_stat_user_tables
WHERE schemaname = 'orchestrator'
ORDER BY n_tup_ins DESC;
# Check for extensions
\dx
# Exit psql
\q
💡 Comments on basic checks
docker exec -it aiserver-pg psql -U postgres -d postgres
- Connects to PostgreSQL in interactive mode
-it- interactive terminal-U postgres- user postgres-d postgres- database postgres
\dt orchestrator.* - shows all tables in the orchestrator schema
\dt- list of tablesorchestrator.*- filter by schema
SELECT ... FROM pg_stat_user_tables - statistics on tables
n_tup_ins- number of inserted rows (approximate number of records)- Sorting in descending order shows the largest tables
\dx - shows installed extensions
- Should show
embeddinganduuid-ossp
\q - exit from psql
Testing Functionality#
- Start main Sherpa AI Server services
- Perform test API requests
- Check the operation of the web interface
- Perform basic data operations
Diagnostics and Troubleshooting#
Common Errors and Solutions#
If migration errors occur, contact technical support, but in the meantime, you can return to the old directory /opt/SherpaAIServer and run the previous settings of Sherpa AI Server
"Heap exhausted" or memory shortage
Solution: Increase memory limit for pgloader
export SBCL_DYNAMIC_SPACE_SIZE=8192
Database connection error
Checks:
- Check port availability: telnet host port
- Check the correctness of credentials
- Check network accessibility of containers
Data integrity violation
Actions:
1. Check pgloader logs: cat migrate.log
2. Compare the number of records in the source and target databases
3. Check for all tables and indexes
Migration interruption
Actions:
- Do not restart the migration
- Contact technical support with logs
- Provide: migrate.log, .env configuration, database size
💡 Comments on monitoring migration
tail -f migrate.log - monitors logs in real-time
-f- follow (updates as new lines are added)- Shows the progress of pgloader migration
- Looks for errors or warnings
docker stats - monitors resource usage by containers
- Shows CPU, memory, network, disk for all containers
- Useful for tracking system load
- Interrupt with Ctrl+C
watch -n 30 - repeats the command every 30 seconds
- Counts the total number of records in all orchestrator tables
watch- utility for periodically executing commands-n 30- interval of 30 seconds
Usage: Keep these commands in separate terminals during migration
Completing the Migration#
After successfully completing all steps:
- Start all Sherpa AI Server services
- Perform final system testing
- Delete temporary files and old containers (if necessary)
Recommendation: Save migration logs and configuration files for future reference.