Skip to main content

Dolt Server Documentation

Dolt Database Server Setup Guide

This document outlines the complete process for setting up a Dolt database server that automatically synchronizes with DoltHub and provides MySQL-compatible access for applications like NocoDB.

System Overview

  • Database Platform: Dolt (git for data)
  • Remote Repository: DoltHub (fb-api-public)
  • Local Database Path: /dolt/dbs/fb-api-public
  • Connection Type: MySQL-compatible (port 3306)
  • Updates: Automatically pulled hourly from DoltHub

Initial Installation

Install Dolt

# Linux
sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'

# macOS
brew install dolt

Clone the Database

# Create directory if it doesn't exist
sudo mkdir -p /dolt/dbs
sudo chmod 777 /dolt/dbs

# Clone the repository
cd /dolt/dbs
dolt clone https://doltremoteapi.dolthub.com/fullbuff/fb-api-public

User Management

Connect to the Dolt SQL Shell

# Connect to the database using Dolt's SQL client
cd /dolt/dbs/fb-api-public
dolt -u root -p "" sql

Create a User for Applications

In the SQL shell:

-- Create a user with a password
CREATE USER 'nocodb'@'%' IDENTIFIED BY 'securepassword';

-- Grant read permissions
GRANT SELECT ON *.* TO 'nocodb'@'%';

-- Apply changes
FLUSH PRIVILEGES;

-- Verify user creation
SELECT User, Host FROM mysql.user WHERE User = 'nocodb';

Automated Service Setup

Create Update Script

Create a script to pull updates from DoltHub:

sudo nano /usr/local/bin/update-dolt.sh

Script content:

#!/bin/bash

# Log file for output
LOG_FILE="/var/log/dolt-update.log"

# Full path to dolt executable
DOLT_PATH=$(which dolt)

# Function to log messages
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# Check if dolt is available
if [ -z "$DOLT_PATH" ]; then
    log "ERROR: dolt executable not found in PATH"
    exit 1
fi

log "Using dolt at: $DOLT_PATH"

# Check if database directory exists
if [ ! -d "/dolt/dbs/fb-api-public" ]; then
    log "ERROR: Database directory /dolt/dbs/fb-api-public does not exist"
    exit 1
fi

# Change to the database directory
cd /dolt/dbs/fb-api-public || {
    log "ERROR: Failed to change to database directory"
    exit 1
}

# Pull updates from main branch
log "Starting pull from origin main"
$DOLT_PATH pull origin main >> "$LOG_FILE" 2>&1
RESULT=$?

if [ $RESULT -eq 0 ]; then
    log "Successfully pulled updates"
else
    log "Failed to pull updates, exit code: $RESULT"
fi

exit $RESULT

Make the script executable:

sudo chmod +x /usr/local/bin/update-dolt.sh

Create Systemd Services

Create the Dolt Server service:

sudo nano /etc/systemd/system/dolt-server.service

Content:

[Unit]
Description=Dolt SQL Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/dolt/dbs/fb-api-public
ExecStart=/usr/local/bin/dolt sql-server --host 0.0.0.0 --port 3306
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Create the update service:

sudo nano /etc/systemd/system/dolt-update.service

Content:

[Unit]
Description=Dolt Database Update
After=network.target
Before=dolt-server.service

[Service]
Type=oneshot
User=root
ExecStart=/usr/local/bin/update-dolt.sh
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

Configure Cron Job for Regular Updates

Set up a cron job to run the update script hourly:

sudo crontab -e

Add:

0 * * * * /usr/local/bin/update-dolt.sh

Enable and Start Services

sudo systemctl daemon-reload
sudo systemctl enable dolt-update.service
sudo systemctl enable dolt-server.service
sudo systemctl start dolt-update.service
sudo systemctl start dolt-server.service

Connecting to the Database

From the Command Line

# Connect as the root user
dolt -u root -p "" sql

# Connect as the application user
dolt -u nocodb -p "securepassword" sql

From Application (e.g., NocoDB)

Connection details:

  • Host: Server IP address
  • Port: 3306
  • Username: nocodb
  • Password: securepassword
  • Database: fb_api_public

Troubleshooting

Check Service Status

sudo systemctl status dolt-server.service
sudo systemctl status dolt-update.service

View Update Logs

cat /var/log/dolt-update.log

Manual Database Operations

cd /dolt/dbs/fb-api-public

# Check status
dolt status

# View remote configuration
dolt remote -v

# Manually pull updates
dolt pull origin main

Restart Services

sudo systemctl restart dolt-update.service
sudo systemctl restart dolt-server.service

Notes

  • The server runs in read-write mode to allow updates from DoltHub
  • Local changes will be overwritten by the scheduled pull
  • All permanent changes should be made through DoltHub's PR process
  • The database is automatically updated hourly and on system boot
  • Both services are configured to start automatically on system boot
  • User authentication is handled with a password for security

This configuration provides a robust, automatically updating Dolt database server that maintains synchronization with DoltHub while providing MySQL-compatible access for applications.