MariaDB¶
MariaDB is a community-developed, commercially supported fork of the MySQL relational database management system. In the brennan.page homelab, MariaDB is used specifically for the Flarum forum service.
Overview¶
- Purpose: Database server for Flarum forum
- Version: Latest stable (Docker Hub)
- Location:
mariadbcontainer - Network:
internal_dbnetwork - Data Volume:
flarum_mariadb_data
Configuration¶
Docker Compose¶
services:
flarum_mariadb:
image: mariadb:latest
container_name: flarum_mariadb
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: flarum
MYSQL_USER: flarum
MYSQL_PASSWORD: ${FLARUM_DB_PASSWORD}
volumes:
- flarum_mariadb_data:/var/lib/mysql
networks:
- internal_db
mem_limit: 256m
volumes:
flarum_mariadb_data:
Environment Variables¶
MYSQL_ROOT_PASSWORD: MariaDB root passwordMYSQL_DATABASE: Default database (flarum)MYSQL_USER: Database user (flarum)MYSQL_PASSWORD: User password
Database Schema¶
Flarum Database Structure¶
-- Users table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Discussions table
CREATE TABLE discussions (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
user_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Posts table
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
discussion_id INT,
user_id INT,
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (discussion_id) REFERENCES discussions(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
Management¶
Connect to Database¶
# Connect as root
docker exec -it flarum_mariadb mysql -u root -p
# Connect as flarum user
docker exec -it flarum_mariadb mysql -u flarum -p flarum
Common Operations¶
-- List databases
SHOW DATABASES;
-- List tables
USE flarum;
SHOW TABLES;
-- Check users
SELECT user, host FROM mysql.user;
-- Show table structure
DESCRIBE users;
-- Check database size
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'flarum'
GROUP BY table_schema;
Backup Database¶
# Backup flarum database
docker exec flarum_mariadb mysqldump -u root -p flarum > flarum_backup.sql
# Restore database
docker exec -i flarum_mariadb mysql -u root -p flarum < flarum_backup.sql
Performance¶
Resource Usage¶
- Memory Limit: 256MB
- CPU: Shared with other containers
- Storage: Persistent volume
- Connections: Limited to Flarum container
Optimization¶
-- Check performance metrics
SHOW STATUS LIKE 'Connections';
SHOW STATUS LIKE 'Queries';
SHOW STATUS LIKE 'Uptime';
-- Optimize tables
OPTIMIZE TABLE users;
OPTIMIZE TABLE discussions;
OPTIMIZE TABLE posts;
Security¶
Access Control¶
- Database only accessible from
internal_dbnetwork - Separate user for Flarum with limited privileges
- Root access restricted to container
Best Practices¶
- Regular backups of database
- Strong passwords for all users
- Monitor connection attempts
- Keep MariaDB updated to latest version
Monitoring¶
Health Checks¶
# Check if MariaDB is running
docker ps | grep flarum_mariadb
# Check database connectivity
docker exec flarum_mariadb mysqladmin ping -h localhost
# Check logs
docker logs flarum_mariadb --tail 50
Metrics to Monitor¶
- Database connections
- Query performance
- Disk usage
- Memory usage
Troubleshooting¶
Common Issues¶
Connection Refused
# Check if container is running
docker ps | grep flarum_mariadb
# Restart container
docker restart flarum_mariadb
Database Not Found
-- Create database if missing
CREATE DATABASE flarum;
GRANT ALL PRIVILEGES ON flarum.* TO 'flarum'@'%';
FLUSH PRIVILEGES;
Performance Issues
-- Check slow queries
SHOW VARIABLES LIKE 'slow_query_log';
SHOW PROCESSLIST;
-- Optimize queries
EXPLAIN SELECT * FROM discussions WHERE user_id = 1;
Integration¶
Flarum Configuration¶
Flarum connects to MariaDB using the following configuration:
// config.php
'database' => [
'driver' => 'mysql',
'host' => 'flarum_mariadb',
'port' => '3306',
'database' => 'flarum',
'username' => 'flarum',
'password' => '${FLARUM_DB_PASSWORD}',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
],
Maintenance¶
Regular Tasks¶
- Weekly database backups
- Monthly optimization
- Quarterly security updates
- Monitor disk usage
Backup Schedule¶
# Daily backup (cron job)
0 2 * * * docker exec flarum_mariadb mysqldump -u root -p${MYSQL_ROOT_PASSWORD} flarum | gzip > /backups/flarum_$(date +\%Y\%m\%d).sql.gz
Version Information¶
- MariaDB Version: Latest stable from Docker Hub
- Deployed: 2026-01-17
- Last Updated: 2026-01-17
- Compatibility: Flarum forum software
Related Services¶
- Flarum: Primary consumer of this database
- PostgreSQL: Other services use PostgreSQL
- Caddy: Reverse proxy for Flarum web interface