Files
EZ-Homelab/docs/service-docs/mariadb.md
kelinfoxy cba45556c7 Complete documentation refactoring with 57 service docs
- Refactored README.md, getting-started.md, quick-reference.md
- Enhanced setup-homelab.sh with 9-step automated process
- Created services-overview.md with all stacks
- Added comprehensive documentation for 57 services in docs/service-docs/
- All services include: overview, configuration, resources, educational content
- Coverage: Core, Infrastructure, Dashboards, Media, Media-Extended, Home Assistant, Productivity, Utilities, Monitoring, Development stacks
- Educational focus with links to tutorials, videos, and guides
2026-01-12 18:03:12 -05:00

5.8 KiB

MariaDB - Database Services

Table of Contents

Overview

Category: Relational Database
Docker Image: mariadb
Default Stack: productivity.yml (multiple instances)
Ports: 3306 (internal, not exposed)

What is MariaDB?

MariaDB is a drop-in replacement for MySQL, created by MySQL's original developers after Oracle acquired MySQL. It's a fast, reliable relational database used by millions of applications. In AI-Homelab, separate MariaDB instances serve different applications.

Key Features

  • MySQL Compatible: Drop-in replacement
  • Fast: High performance
  • Reliable: ACID compliant
  • Standard SQL: Industry standard
  • Replication: Master-slave support
  • Hot Backups: Online backups
  • Storage Engines: Multiple engines
  • Free & Open Source: GPL license

Why Use MariaDB?

  1. MySQL Alternative: Better governance than Oracle MySQL
  2. Performance: Often faster than MySQL
  3. Compatible: Works with MySQL applications
  4. Open Source: Truly community-driven
  5. Stable: Production-ready
  6. Standard: SQL standard compliance
  7. Support: Wide adoption

Configuration in AI-Homelab

Database Instances

AI-Homelab uses separate MariaDB containers for each application to ensure:

  • Isolation: App failures don't affect others
  • Backup Independence: Backup apps separately
  • Resource Control: Per-app resource limits
  • Version Control: Different versions if needed

Official Resources

Database Instances in AI-Homelab

1. Nextcloud Database (nextcloud-db)

nextcloud-db:
  image: mariadb:latest
  container_name: nextcloud-db
  restart: unless-stopped
  networks:
    - traefik-network
  environment:
    - MYSQL_ROOT_PASSWORD=${NEXTCLOUD_DB_ROOT_PASSWORD}
    - MYSQL_DATABASE=nextcloud
    - MYSQL_USER=nextcloud
    - MYSQL_PASSWORD=${NEXTCLOUD_DB_PASSWORD}
  volumes:
    - /opt/stacks/productivity/nextcloud-db/data:/var/lib/mysql
  command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW

Purpose: Nextcloud file storage metadata
Location: /opt/stacks/productivity/nextcloud-db/data
Special: Requires specific transaction isolation

2. WordPress Database (wordpress-db)

wordpress-db:
  image: mariadb:latest
  container_name: wordpress-db
  restart: unless-stopped
  networks:
    - traefik-network
  environment:
    - MYSQL_ROOT_PASSWORD=${WP_DB_ROOT_PASSWORD}
    - MYSQL_DATABASE=wordpress
    - MYSQL_USER=wordpress
    - MYSQL_PASSWORD=${WP_DB_PASSWORD}
  volumes:
    - /opt/stacks/productivity/wordpress-db/data:/var/lib/mysql

Purpose: WordPress content and configuration
Location: /opt/stacks/productivity/wordpress-db/data

3. BookStack Database (bookstack-db)

bookstack-db:
  image: mariadb:latest
  container_name: bookstack-db
  restart: unless-stopped
  networks:
    - traefik-network
  environment:
    - MYSQL_ROOT_PASSWORD=${BOOKSTACK_DB_ROOT_PASSWORD}
    - MYSQL_DATABASE=bookstack
    - MYSQL_USER=bookstack
    - MYSQL_PASSWORD=${BOOKSTACK_DB_PASSWORD}
  volumes:
    - /opt/stacks/productivity/bookstack-db/data:/var/lib/mysql

Purpose: BookStack knowledge base content
Location: /opt/stacks/productivity/bookstack-db/data

4. MediaWiki Database (mediawiki-db)

mediawiki-db:
  image: mariadb:latest
  container_name: mediawiki-db
  restart: unless-stopped
  networks:
    - traefik-network
  environment:
    - MYSQL_ROOT_PASSWORD=${MEDIAWIKI_DB_ROOT_PASSWORD}
    - MYSQL_DATABASE=mediawiki
    - MYSQL_USER=mediawiki
    - MYSQL_PASSWORD=${MEDIAWIKI_DB_PASSWORD}
  volumes:
    - /opt/stacks/productivity/mediawiki-db/data:/var/lib/mysql

Purpose: MediaWiki wiki content
Location: /opt/stacks/productivity/mediawiki-db/data

Management

Access Database

# Connect to database
docker exec -it nextcloud-db mysql -u nextcloud -p

# Or as root
docker exec -it nextcloud-db mysql -u root -p

Backup Database

# Backup single database
docker exec nextcloud-db mysqldump -u root -p${ROOT_PASSWORD} nextcloud > nextcloud-backup.sql

# Backup all databases
docker exec nextcloud-db mysqldump -u root -p${ROOT_PASSWORD} --all-databases > all-dbs-backup.sql

# Restore database
docker exec -i nextcloud-db mysql -u root -p${ROOT_PASSWORD} nextcloud < nextcloud-backup.sql

Check Database Size

# Check size
docker exec -it nextcloud-db mysql -u root -p -e "
SELECT 
  table_schema AS 'Database',
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.TABLES
GROUP BY table_schema;"

Optimize Database

# Optimize all tables
docker exec nextcloud-db mysqlcheck -u root -p --optimize --all-databases

Summary

MariaDB provides reliable database services for:

  • Nextcloud (file metadata)
  • WordPress (content management)
  • BookStack (knowledge base)
  • MediaWiki (wiki content)
  • Future applications

Key Points:

  • Separate container per application
  • Isolated for reliability
  • Standard MySQL compatibility
  • ACID compliance
  • Easy backup/restore
  • Low resource usage
  • Production-ready

Remember:

  • Use strong passwords
  • Regular backups critical
  • Monitor disk space
  • Optimize periodically
  • Update carefully
  • Test backups work
  • Separate containers = better isolation

MariaDB powers your data-driven applications!