Menu
 

TeamSpeak Backup & Recovery Guide

TeamSpeak: Complete Backup & Recovery Guide

Essential guide to backing up and restoring TeamSpeak server data, including permissions, databases, configurations, and disaster recovery procedures.

Understanding TeamSpeak Data Structure

Critical Components to Backup

  • Database Files: SQLite databases containing users, permissions, and channels
  • Configuration Files: Server configuration and license files
  • File Transfers: Uploaded files and avatars
  • Server Logs: Historical logs for troubleshooting
  • Icons/Banners: Custom server graphics and branding

File Locations

# Linux Default Locations /opt/teamspeak3-server_linux_amd64/ ├── ts3server.sqlitedb # Main database ├── serverquerydocs/ # File transfer uploads ├── logs/ # Server logs ├── files/ # Avatar and icon files ├── licensekey.dat # License file (if applicable) └── ts3server.ini # Server configuration # Windows Default Locations C:\Program Files\TeamSpeak 3 Server\ ├── ts3server.sqlitedb ├── serverquerydocs\ ├── logs\ ├── files\ ├── licensekey.dat └── ts3server.ini

Manual Backup Procedures

Immediate Backup Script

#!/bin/bash # teamspeak_backup.sh TS_DIR="/opt/teamspeak3-server_linux_amd64" BACKUP_DIR="/home/backups/teamspeak" DATE=$(date +%Y%m%d_%H%M%S) MAX_BACKUPS=7 mkdir -p "$BACKUP_DIR" echo "Starting TeamSpeak backup..." # Stop TeamSpeak service systemctl stop teamspeak3 # Create backup directory mkdir -p "$BACKUP_DIR/backup_$DATE" # Backup critical files cp "$TS_DIR/ts3server.sqlitedb" "$BACKUP_DIR/backup_$DATE/" cp "$TS_DIR/ts3server.ini" "$BACKUP_DIR/backup_$DATE/" cp -r "$TS_DIR/files" "$BACKUP_DIR/backup_$DATE/" cp -r "$TS_DIR/logs" "$BACKUP_DIR/backup_$DATE/" cp -r "$TS_DIR/serverquerydocs" "$BACKUP_DIR/backup_$DATE/" # Backup license file if exists if [ -f "$TS_DIR/licensekey.dat" ]; then cp "$TS_DIR/licensekey.dat" "$BACKUP_DIR/backup_$DATE/" fi # Create compressed archive cd "$BACKUP_DIR" tar -czf "teamspeak_backup_$DATE.tar.gz" "backup_$DATE/" rm -rf "backup_$DATE/" # Start TeamSpeak service systemctl start teamspeak3 # Clean old backups ls -t teamspeak_backup_*.tar.gz | tail -n +$((MAX_BACKUPS + 1)) | xargs -r rm echo "Backup completed: teamspeak_backup_$DATE.tar.gz"

Windows Backup Script

@echo off REM teamspeak_backup.bat SET TS_DIR="C:\Program Files\TeamSpeak 3 Server" SET BACKUP_DIR="D:\Backups\TeamSpeak" SET DATE=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2% SET DATE=%DATE: =0% mkdir "%BACKUP_DIR%" echo Starting TeamSpeak backup... REM Stop TeamSpeak service net stop "TeamSpeak 3 Server" REM Create backup directory mkdir "%BACKUP_DIR%\backup_%DATE%" REM Backup critical files copy "%TS_DIR%\ts3server.sqlitedb" "%BACKUP_DIR%\backup_%DATE%\" copy "%TS_DIR%\ts3server.ini" "%BACKUP_DIR%\backup_%DATE%\" xcopy "%TS_DIR%\files" "%BACKUP_DIR%\backup_%DATE%\files\" /E /I /Y xcopy "%TS_DIR%\logs" "%BACKUP_DIR%\backup_%DATE%\logs\" /E /I /Y xcopy "%TS_DIR%\serverquerydocs" "%BACKUP_DIR%\backup_%DATE%\serverquerydocs\" /E /I /Y REM Backup license file if exists if exist "%TS_DIR%\licensekey.dat" ( copy "%TS_DIR%\licensekey.dat" "%BACKUP_DIR%\backup_%DATE%\" ) REM Start TeamSpeak service net start "TeamSpeak 3 Server" echo Backup completed: backup_%DATE%

Automated Backup Solutions

Cron Job Setup (Linux)

# Edit crontab crontab -e # Add backup schedules # Daily backup at 3:00 AM 0 3 * * * /home/scripts/teamspeak_backup.sh >> /home/logs/backup.log 2>&1 # Weekly full backup on Sundays at 2:00 AM 0 2 * * 0 /home/scripts/teamspeak_full_backup.sh >> /home/logs/backup.log 2>&1 # Hourly incremental backup 0 * * * * /home/scripts/teamspeak_incremental.sh >> /home/logs/backup.log 2>&1

Windows Task Scheduler

REM Schedule daily backup at 3:00 AM schtasks /create /tn "TeamSpeak Daily Backup" /tr "C:\Scripts\teamspeak_backup.bat" /sc daily /st 03:00 REM Schedule weekly backup on Sundays schtasks /create /tn "TeamSpeak Weekly Backup" /tr "C:\Scripts\teamspeak_backup.bat" /sc weekly /d SUN /st 02:00

Incremental Backup Strategy

SQLite Database Dumps

#!/bin/bash # teamspeak_incremental.sh TS_DIR="/opt/teamspeak3-server_linux_amd64" BACKUP_DIR="/home/backups/teamspeak/incremental" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p "$BACKUP_DIR" # Create SQLite dump sqlite3 "$TS_DIR/ts3server.sqlitedb" ".dump" > "$BACKUP_DIR/database_$DATE.sql" # Backup recent changes only find "$TS_DIR/logs" -name "*.log" -mtime -1 -exec cp {} "$BACKUP_DIR/" \; find "$TS_DIR/serverquerydocs" -mtime -1 -exec cp -r {} "$BACKUP_DIR/" \; echo "Incremental backup: database_$DATE.sql"

Remote Backup Solutions

Cloud Storage Integration

#!/bin/bash # teamspeak_cloud_backup.sh LOCAL_BACKUP_DIR="/home/backups/teamspeak" CLOUD_BUCKET="teamspeak-backups" # Upload to AWS S3 aws s3 sync "$LOCAL_BACKUP_DIR" s3://$CLOUD_BUCKET/ --delete # Upload to Google Drive rclone sync "$LOCAL_BACKUP_DIR" gdrive:teamspeak-backups/ # Upload to Dropbox python3 /home/scripts/dropbox_upload.py "$LOCAL_BACKUP_DIR" echo "Cloud sync completed"

Off-site Server Sync

#!/bin/bash # teamspeak_remote_sync.sh LOCAL_DIR="/home/backups/teamspeak" REMOTE_SERVER="backup.example.com" REMOTE_DIR="/backups/teamspeak" # Sync using rsync with SSH rsync -avz --delete -e "ssh -i /home/.ssh/backup_key" \ "$LOCAL_DIR/" "$REMOTE_SERVER:$REMOTE_DIR/" # Verify transfer if [ $? -eq 0 ]; then echo "Remote sync successful" else echo "Remote sync failed - check network connectivity" # Send notification echo "TeamSpeak backup sync failed" | mail -s "Backup Alert" admin@example.com fi

Database Maintenance

SQLite Optimization

#!/bin/bash # teamspeak_maintenance.sh TS_DIR="/opt/teamspeak3-server_linux_amd64" DB_FILE="$TS_DIR/ts3server.sqlitedb" echo "Performing database maintenance..." # Stop TeamSpeak systemctl stop teamspeak3 # Create database backup before maintenance cp "$DB_FILE" "$DB_FILE.backup.$(date +%Y%m%d_%H%M%S)" # Database optimization sqlite3 "$DB_FILE" "VACUUM;" sqlite3 "$DB_FILE" "ANALYZE;" sqlite3 "$DB_FILE" "REINDEX;" # Remove old entries (90 days) sqlite3 "$DB_FILE" "DELETE FROM logs WHERE timestamp < datetime('now', '-90 days');" # Start TeamSpeak systemctl start teamspeak3 echo "Database maintenance completed"

Recovery Procedures

Full Server Recovery

#!/bin/bash # teamspeak_restore.sh BACKUP_FILE="$1" TS_DIR="/opt/teamspeak3-server_linux_amd64" if [ -z "$BACKUP_FILE" ]; then echo "Usage: $0 " exit 1 fi echo "Starting TeamSpeak recovery from: $BACKUP_FILE" # Stop TeamSpeak systemctl stop teamspeak3 # Create backup of current state cp "$TS_DIR/ts3server.sqlitedb" "$TS_DIR/ts3server.sqlitedb.recovery_backup.$(date +%Y%m%d_%H%M%S)" # Extract backup cd "$TS_DIR" tar -xzf "$BACKUP_FILE" # Restore files if [ -f "backup_*/ts3server.sqlitedb" ]; then mv "backup_*/ts3server.sqlitedb" "$TS_DIR/" fi if [ -f "backup_*/ts3server.ini" ]; then mv "backup_*/ts3server.ini" "$TS_DIR/" fi if [ -d "backup_*/files" ]; then rm -rf "$TS_DIR/files" mv "backup_*/files" "$TS_DIR/" fi # Set correct permissions chown -R teamspeak:teamspeak "$TS_DIR" chmod 644 "$TS_DIR/ts3server.sqlitedb" chmod 644 "$TS_DIR/ts3server.ini" # Start TeamSpeak systemctl start teamspeak3 echo "Recovery completed"

Specific Data Recovery

Restoring Permissions Only

#!/bin/bash # restore_permissions.sh BACKUP_DB="$1" CURRENT_DB="/opt/teamspeak3-server_linux_amd64/ts3server.sqlitedb" if [ -z "$BACKUP_DB" ]; then echo "Usage: $0 " exit 1 fi # Export permissions from backup sqlite3 "$BACKUP_DB" ".dump permissions" > /tmp/permissions.sql # Import permissions to current database sqlite3 "$CURRENT_DB" < /tmp/permissions.sql echo "Permissions restored"

Restoring Files Only

#!/bin/bash # restore_files.sh BACKUP_DIR="$1" TS_DIR="/opt/teamspeak3-server_linux_amd64" if [ -z "$BACKUP_DIR" ]; then echo "Usage: $0 " exit 1 fi # Restore uploaded files cp -r "$BACKUP_DIR/serverquerydocs/"* "$TS_DIR/serverquerydocs/" cp -r "$BACKUP_DIR/files/"* "$TS_DIR/files/" # Set permissions chown -R teamspeak:teamspeak "$TS_DIR/serverquerydocs" chown -R teamspeak:teamspeak "$TS_DIR/files" echo "Files restored"

Disaster Recovery Planning

Recovery Time Objectives (RTO/RPO)

Service Level Agreements

  • RPO (Recovery Point Objective): Maximum 1 hour data loss
  • RTO (Recovery Time Objective): Maximum 30 minutes downtime
  • Backup Frequency: Every 15 minutes for database, daily for full
  • Retention Period: 30 days for daily, 1 year for weekly

Emergency Procedures

Critical Failure Response

  1. Immediate Assessment: Identify failure scope and impact
  2. Communication: Notify users and stakeholders
  3. Isolation: Prevent further damage to systems
  4. Recovery Initiation: Begin restoration process
  5. Verification: Test restored systems thoroughly
  6. Documentation: Record incident and lessons learned

Monitoring and Alerting

Backup Health Monitoring

#!/bin/bash # backup_monitor.sh BACKUP_DIR="/home/backups/teamspeak" ALERT_EMAIL="admin@example.com" MAX_AGE_HOURS=24 # Check for recent backup LATEST_BACKUP=$(ls -t "$BACKUP_DIR"/teamspeak_backup_*.tar.gz | head -1) BACKUP_AGE=$(( ($(date +%s) - $(stat -c %Y "$LATEST_BACKUP")) / 3600 )) if [ "$BACKUP_AGE" -gt "$MAX_AGE_HOURS" ]; then echo "ALERT: TeamSpeak backup is $BACKUP_AGE hours old" | \ mail -s "TeamSpeak Backup Alert" "$ALERT_EMAIL" fi # Check backup file integrity tar -tzf "$LATEST_BACKUP" > /dev/null if [ $? -ne 0 ]; then echo "ALERT: TeamSpeak backup corruption detected" | \ mail -s "TeamSpeak Backup Alert" "$ALERT_EMAIL" fi

Best Practices

Backup Strategy Recommendations

  • 3-2-1 Rule: 3 copies, 2 different media, 1 off-site
  • Regular Testing: Test recovery procedures monthly
  • Encryption: Encrypt backups for security
  • Documentation: Maintain detailed recovery procedures
  • Monitoring: Monitor backup success and storage capacity

Security Considerations

  • Access Control: Restrict backup file access to authorized personnel
  • Encryption Keys: Store encryption keys securely
  • Backup Integrity: Verify backup checksums regularly
  • Secure Storage: Use encrypted cloud storage for off-site backups
  • Audit Logging: Log all backup and recovery activities

Troubleshooting

Common Backup Issues

❌ Database Lock Error

TeamSpeak server must be stopped during backup to prevent database corruption.

❌ Permission Denied

Ensure backup script runs with proper permissions to access TeamSpeak files.

❌ Disk Space Full

Monitor available disk space and implement cleanup policies for old backups.

❌ Network Timeout

For remote backups, implement retry logic and timeout handling.

Pro Tip: Always test backup recovery procedures before implementing them in production to ensure they work as expected.

Top