Skip to main content

Upgrading LynxDB

LynxDB includes a built-in self-update mechanism. The binary can upgrade itself in place, or you can update through your package manager or container registry.

Check for Updates

lynxdb upgrade --check
Update available: v0.4.0 -> v0.5.0
Changelog: https://github.com/lynxbase/lynxdb/releases/tag/v0.5.0

If you are already on the latest version:

LynxDB v0.5.0 is up to date.

Self-Update (Single Binary)

The simplest way to upgrade. The binary downloads the new version, verifies the checksum, and performs an atomic swap:

lynxdb upgrade
Checking for updates...
Downloading lynxdb v0.5.0 for linux/amd64...
100% 15.0MB
Checksum verified
Upgraded: v0.4.0 -> v0.5.0

Upgrade to a Specific Version

lynxdb upgrade --version v0.5.0-rc.1

Prerelease versions require explicit consent:

lynxdb upgrade --version v0.5.0-rc.1 --allow-prerelease

Nightly Upgrades

Nightly builds are prerelease builds from main for testing. They may contain regressions and are not recommended for production.

# Check latest nightly without installing
lynxdb upgrade --check --channel nightly --allow-prerelease

# Upgrade to latest nightly
lynxdb upgrade --channel nightly --allow-prerelease

Stable upgrades never read the nightly manifest. lynxdb upgrade reads https://dl.lynxdb.org/manifest.json; nightly upgrades read https://dl.lynxdb.org/nightly/manifest.json only when both --channel nightly and --allow-prerelease are provided.

How Self-Update Works

  1. Fetches manifest.json from dl.lynxdb.org (fallback: GitHub Releases)
  2. Compares the installed version with the latest version
  3. Downloads the new binary to a temporary file while computing SHA256
  4. Verifies the checksum matches the manifest
  5. Performs an atomic rename: .new -> current binary, old binary -> .old
  6. Cleans up .old file

The update is atomic -- if anything fails, the old binary remains in place.

Install Script

Re-run the install script to upgrade:

curl -fsSL https://lynxdb.org/install.sh | sh

The script detects the existing installation and shows the version change:

LynxDB v0.4.0 is installed. Upgrading to v0.5.0...

Install a Specific Version

LYNXDB_VERSION=v0.5.0 curl -fsSL https://lynxdb.org/install.sh | sh

Install Nightly

curl -fsSL https://lynxdb.org/install.sh | sh -s -- --channel nightly --allow-prerelease

Homebrew

brew update
brew upgrade lynxbase/tap/lynxdb

Nightly uses a separate package because it installs the same lynxdb binary name:

brew install lynxbase/tap/lynxdb-nightly
brew upgrade lynxbase/tap/lynxdb-nightly

Docker

# Pull the latest image
docker pull ghcr.io/lynxbase/lynxdb:latest

# Or a specific version
docker pull ghcr.io/lynxbase/lynxdb:0.5.0

# Or latest nightly for testing
docker pull ghcr.io/lynxbase/lynxdb:nightly

Roll Back to Stable

curl -fsSL https://lynxdb.org/install.sh | sh
brew uninstall lynxdb-nightly
brew install lynxbase/tap/lynxdb
docker pull ghcr.io/lynxbase/lynxdb:latest
lynxdb upgrade

Docker Compose

docker compose pull
docker compose up -d

Kubernetes

# Update the image tag in your manifest
kubectl -n lynxdb set image statefulset/lynxdb lynxdb=ghcr.io/lynxbase/lynxdb:0.5.0

# Watch the rollout
kubectl -n lynxdb rollout status statefulset/lynxdb

Single-Node Upgrade Procedure

With systemd

# 1. Check for updates
lynxdb upgrade --check

# 2. Stop the server
sudo systemctl stop lynxdb

# 3. Upgrade the binary
sudo lynxdb upgrade
# or: curl -fsSL https://lynxdb.org/install.sh | sudo sh
# or: sudo lynxdb install --yes (re-running install upgrades the binary in place)

# 4. Verify the new version
lynxdb version

# 5. Start the server
sudo systemctl start lynxdb

# 6. Verify health
lynxdb health
lynxdb status

Downtime: A few seconds (stop -> upgrade -> start).

Zero-Downtime with Load Balancer

If you have a load balancer in front of LynxDB:

# 1. Remove from load balancer
# (configure health check to fail, or manually remove)

# 2. Wait for in-flight requests to complete
sleep 10

# 3. Stop, upgrade, start
sudo systemctl stop lynxdb
sudo lynxdb upgrade
sudo systemctl start lynxdb

# 4. Verify health
lynxdb health

# 5. Re-add to load balancer

Cluster Rolling Upgrade

For cluster deployments, upgrade one node at a time to maintain availability:

Small Cluster (All Roles)

# Upgrade nodes one at a time
for node in node-1 node-2 node-3; do
echo "Upgrading $node..."

# Stop the node
ssh $node "sudo systemctl stop lynxdb"

# Upgrade
ssh $node "sudo lynxdb upgrade"

# Start
ssh $node "sudo systemctl start lynxdb"

# Wait for the node to rejoin the cluster
sleep 30

# Verify health
ssh $node "lynxdb health"

echo "$node upgraded successfully."
done

Protocol Version Compatibility

LynxDB cluster nodes check protocol version compatibility during the Handshake RPC. Nodes with different protocol versions cannot join the same cluster. During a rolling upgrade:

  • Nodes running the old version continue to communicate normally.
  • The new binary must support the same protocol version as the old binary (backward-compatible within a minor version).
  • Major version upgrades that bump the protocol version require upgrading all nodes within a maintenance window.

Check the release notes for protocol version changes before upgrading.

Large Cluster (Role-Separated)

Upgrade in this order to minimize disruption:

  1. Query nodes first (stateless, easiest to replace)
  2. Ingest nodes second (stateless after flush)
  3. Meta nodes last (maintain Raft quorum)
# 1. Query nodes (can upgrade in parallel, but rolling is safer)
for node in query-1 query-2 query-3; do
ssh $node "sudo systemctl stop lynxdb && sudo lynxdb upgrade && sudo systemctl start lynxdb"
sleep 15
ssh $node "lynxdb health"
done

# 2. Ingest nodes (one at a time, wait for shard reassignment ~25s)
for node in ingest-1 ingest-2 ingest-3; do
ssh $node "sudo systemctl stop lynxdb && sudo lynxdb upgrade && sudo systemctl start lynxdb"
sleep 35 # Wait for shard reassignment (~25s) + rejoin
ssh $node "lynxdb health"
done

# 3. Meta nodes (one at a time, maintain quorum)
for node in meta-1 meta-2 meta-3; do
ssh $node "sudo systemctl stop lynxdb && sudo lynxdb upgrade && sudo systemctl start lynxdb"
sleep 35 # Wait for Raft leader election + lease renewal
ssh $node "lynxdb health"
done

Kubernetes Rolling Update

# Update the image in the StatefulSet
spec:
template:
spec:
containers:
- name: lynxdb
image: ghcr.io/lynxbase/lynxdb:0.5.0 # New version
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0 # Update all pods
kubectl -n lynxdb rollout status statefulset/lynxdb

Version Compatibility

Data Format Compatibility

LynxDB maintains backward compatibility for the .lsg segment format. Newer versions can read segments written by older versions. In rare cases, a major version upgrade may require ratcheting the on-disk format marker forward:

# Stop the server first, then ratchet the data directory marker.
lynxdb admin format-upgrade --data-dir /var/lib/lynxdb --to 2 --confirm

Always run this with the server stopped. The release notes specify the target format version when an upgrade requires it.

Config Compatibility

New config keys are added with sensible defaults. Existing config files continue to work without changes. Unknown keys produce a warning during lynxdb config validate.

Rollback

If an upgrade causes issues:

Single Node

# The old binary is saved as lynxdb.old after self-update
sudo systemctl stop lynxdb
sudo mv /usr/local/bin/lynxdb.old /usr/local/bin/lynxdb
sudo systemctl start lynxdb

Install a Specific Older Version

LYNXDB_VERSION=v0.4.0 curl -fsSL https://lynxdb.org/install.sh | sh

Docker

docker pull ghcr.io/lynxbase/lynxdb:0.4.0
docker compose up -d

Release Channels

ChannelURLDescription
Stabledl.lynxdb.org/manifest.jsonProduction-ready releases
Pre-releaselynxdb upgrade --version v0.5.0-rc.1Release candidates for testing

Checking Version

lynxdb version

# Output:
# LynxDB v0.5.0 (abc1234) built 2026-03-01T10:00:00Z
# Go: go1.26.3 linux/amd64

Next Steps