Database Module (MariaDB)
Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.
Complete guide to deploying and managing the MariaDB database with high availability, automated backups, and monitoring.
🏗️ Overview
Section titled “🏗️ Overview”The database module provides a production-ready MariaDB deployment with high availability, automated backups, and comprehensive monitoring. It’s optimized for SaaS applications with built-in scaling capabilities.
Architecture Components
Section titled “Architecture Components”MariaDB Deployment:├── Primary Database Pod (Read/Write)├── Secondary Database Pod (Read-only)├── Persistent Storage (SSD)├── Automated Backups├── Monitoring & Metrics└── High Availability Setup
🚀 Features
Section titled “🚀 Features”High Availability
Section titled “High Availability”- Primary-Secondary Replication: Automatic failover capability
- Data Persistence: SSD-backed persistent volumes
- Health Monitoring: Comprehensive health checks
- Zero-Downtime Updates: Rolling update strategy
Performance Optimization
Section titled “Performance Optimization”- InnoDB Tuning: Optimized for SaaS workloads
- Connection Pooling: Efficient connection management
- Query Optimization: Slow query monitoring
- Memory Configuration: Optimal buffer pool settings
Security Features
Section titled “Security Features”- Encrypted Connections: SSL/TLS for client connections
- User Management: Role-based access control
- Network Policies: Restricted pod-to-pod access
- Backup Encryption: Encrypted backup storage
📦 Deployment Configuration
Section titled “📦 Deployment Configuration”Helmfile Configuration
Section titled “Helmfile Configuration”The database is deployed using Helmfile for environment management:
repositories: - name: bitnami url: https://charts.bitnami.com/bitnami
releases: - name: mariadb namespace: mariadb chart: bitnami/mariadb version: "11.4.2" values: - values.yaml
Core Configuration Values
Section titled “Core Configuration Values”architecture: replication
auth: rootPassword: "OklrXSFLzL" username: "myproject" password: "lPOJihokkzr" database: "myproject" replicationUser: "replicator" replicationPassword: "replication123"
primary: persistence: enabled: true storageClass: "fast-ssd" size: 100Gi
resources: requests: memory: 2Gi cpu: 1000m limits: memory: 4Gi cpu: 2000m
secondary: replicaCount: 1 persistence: enabled: true size: 100Gi
resources: requests: memory: 1Gi cpu: 500m limits: memory: 2Gi cpu: 1000m
Custom Configuration
Section titled “Custom Configuration”# MariaDB server configurationconfiguration: |- [mysqld] max_allowed_packet=268435456 innodb_buffer_pool_size=1G innodb_flush_log_at_trx_commit=1 innodb_file_per_table=1 innodb_log_buffer_size=64M innodb_log_file_size=512M query_cache_type=0 query_cache_size=0 slow_query_log=1 long_query_time=2.0 max_connections=1000 wait_timeout=28800 interactive_timeout=28800 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
🔄 Backup & Recovery
Section titled “🔄 Backup & Recovery”Automated Backup Configuration
Section titled “Automated Backup Configuration”# Backup job configurationbackup: enabled: true cronjob: schedule: "0 2 * * *" # Daily at 2 AM historyLimit: 7 concurrencyPolicy: Replace
persistence: enabled: true size: 500Gi storageClass: "standard"
Manual Backup Commands
Section titled “Manual Backup Commands”# Create manual backupkubectl exec -it mariadb-primary-0 -n mariadb -- \ mysqldump -u root -p --all-databases --single-transaction > backup.sql
# Backup specific databasekubectl exec -it mariadb-primary-0 -n mariadb -- \ mysqldump -u root -p myproject > myproject-backup.sql
# Backup with gzip compressionkubectl exec -it mariadb-primary-0 -n mariadb -- \ mysqldump -u root -p myproject | gzip > myproject-backup.sql.gz
Backup Using Task Runner
Section titled “Backup Using Task Runner”# Using the included Taskfilecd iac/modules/cert-manager/mariadbtask backup
# Restore from backuptask restore BACKUP_FILE=myproject-20240110-backup.sql
Point-in-Time Recovery
Section titled “Point-in-Time Recovery”# Enable binary logging for PITRconfiguration: |- [mysqld] log-bin=mysql-bin binlog_format=ROW expire_logs_days=7 sync_binlog=1
📊 Monitoring & Metrics
Section titled “📊 Monitoring & Metrics”Health Checks
Section titled “Health Checks”# Liveness probelivenessProbe: exec: command: - /bin/bash - -ec - mysqladmin status -u root -p$MARIADB_ROOT_PASSWORD initialDelaySeconds: 120 periodSeconds: 10
# Readiness probereadinessProbe: exec: command: - /bin/bash - -ec - mysqladmin status -u root -p$MARIADB_ROOT_PASSWORD initialDelaySeconds: 30 periodSeconds: 5
Performance Monitoring
Section titled “Performance Monitoring”# Monitor database performancekubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p -e "SHOW PROCESSLIST;"
# Check slow querieskubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p -e "SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;"
# Monitor replication statuskubectl exec -it mariadb-secondary-0 -n mariadb -- \ mysql -u root -p -e "SHOW SLAVE STATUS\G"
Database Size Monitoring
Section titled “Database Size Monitoring”# Check database sizeskubectl exec -it mariadb-primary-0 -n mariadb -- \ 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;"
# Check table sizeskubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p myproject -e " SELECT table_name AS 'Table', ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = 'myproject' ORDER BY (data_length + index_length) DESC;"
🚀 Deployment
Section titled “🚀 Deployment”Deploy Database Module
Section titled “Deploy Database Module”# Navigate to module directorycd iac/modules/cert-manager/mariadb
# Deploy using Helmfilehelmfile apply
# Verify deploymentkubectl get pods -n mariadbkubectl get services -n mariadb
Using Task Runner
Section titled “Using Task Runner”# Deploy databasetask deploy
# Check statustask status
# View logstask logs
Verify Deployment
Section titled “Verify Deployment”# Check pod statuskubectl get pods -n mariadb -l app.kubernetes.io/name=mariadb
# Test database connectionkubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p -e "SELECT 1;"
# Verify replicationkubectl exec -it mariadb-secondary-0 -n mariadb -- \ mysql -u root -p -e "SHOW SLAVE STATUS\G"
🔧 Maintenance Operations
Section titled “🔧 Maintenance Operations”Scaling Operations
Section titled “Scaling Operations”# Scale secondary replicaskubectl patch statefulset mariadb-secondary -n mariadb \ --patch='{"spec":{"replicas":2}}'
# Verify scalingkubectl get pods -n mariadb | grep secondary
Update Operations
Section titled “Update Operations”# Rolling updatehelmfile apply
# Monitor update progresskubectl rollout status statefulset/mariadb-primary -n mariadbkubectl rollout status statefulset/mariadb-secondary -n mariadb
User Management
Section titled “User Management”# Connect to databasekubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p
# Create application userCREATE USER 'appuser'@'%' IDENTIFIED BY 'secure_password';GRANT SELECT, INSERT, UPDATE, DELETE ON myproject.* TO 'appuser'@'%';FLUSH PRIVILEGES;
# Create read-only userCREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly_password';GRANT SELECT ON myproject.* TO 'readonly'@'%';FLUSH PRIVILEGES;
Database Optimization
Section titled “Database Optimization”# Analyze tableskubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p myproject -e "ANALYZE TABLE table_name;"
# Optimize tableskubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p myproject -e "OPTIMIZE TABLE table_name;"
# Check for fragmentationkubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p -e " SELECT table_name, ROUND(data_length/1024/1024) as data_mb, ROUND(data_free/1024/1024) as free_mb FROM information_schema.tables WHERE table_schema = 'myproject' AND data_free > 0;"
🚨 Troubleshooting
Section titled “🚨 Troubleshooting”Common Issues
Section titled “Common Issues”1. Connection Problems
Section titled “1. Connection Problems”# Check service connectivitykubectl get services -n mariadb
# Test network connectivitykubectl exec -it mariadb-primary-0 -n mariadb -- \ nc -zv mariadb-service 3306
# Verify DNS resolutionkubectl exec -it mariadb-primary-0 -n mariadb -- \ nslookup mariadb-service
2. Replication Issues
Section titled “2. Replication Issues”# Check replication statuskubectl exec -it mariadb-secondary-0 -n mariadb -- \ mysql -u root -p -e "SHOW SLAVE STATUS\G"
# Reset replication (if needed)kubectl exec -it mariadb-secondary-0 -n mariadb -- \ mysql -u root -p -e "STOP SLAVE; RESET SLAVE; START SLAVE;"
# Check primary binary log positionkubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p -e "SHOW MASTER STATUS;"
3. Performance Issues
Section titled “3. Performance Issues”# Check running processeskubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p -e "SHOW PROCESSLIST;"
# Check slow query logkubectl exec -it mariadb-primary-0 -n mariadb -- \ tail -f /var/log/mysql/slow.log
# Check InnoDB statuskubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G"
4. Storage Issues
Section titled “4. Storage Issues”# Check persistent volume statuskubectl get pv | grep mariadb
# Check storage usagekubectl exec -it mariadb-primary-0 -n mariadb -- df -h
# Check for disk space alertskubectl describe pod mariadb-primary-0 -n mariadb
Recovery Procedures
Section titled “Recovery Procedures”Emergency Recovery
Section titled “Emergency Recovery”# Force delete stuck podskubectl delete pod mariadb-primary-0 -n mariadb --grace-period=0 --force
# Restore from backupkubectl exec -it mariadb-primary-0 -n mariadb -- \ mysql -u root -p < backup.sql
# Rebuild replicationkubectl exec -it mariadb-secondary-0 -n mariadb -- \ mysql -u root -p -e " STOP SLAVE; CHANGE MASTER TO MASTER_HOST='mariadb-primary', MASTER_USER='replicator', MASTER_PASSWORD='replication123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4; START SLAVE;"
🔒 Security Configuration
Section titled “🔒 Security Configuration”SSL/TLS Configuration
Section titled “SSL/TLS Configuration”# Enable SSLssl: enabled: true certificatesSecret: "mariadb-certs"
# Certificate configurationconfiguration: |- [mysqld] ssl-ca=/opt/bitnami/mariadb/certs/ca.crt ssl-cert=/opt/bitnami/mariadb/certs/server.crt ssl-key=/opt/bitnami/mariadb/certs/server.key require_secure_transport=ON
Network Security
Section titled “Network Security”# Network policy for database accessnetworkPolicy: enabled: true allowExternal: false ingressRules: primaryAccessOnlyFrom: enabled: true namespaceSelector: matchLabels: name: production podSelector: matchLabels: app.kubernetes.io/name: backend
📝 Configuration Examples
Section titled “📝 Configuration Examples”High-Performance Configuration
Section titled “High-Performance Configuration”# High-performance valuesprimary: resources: requests: memory: 8Gi cpu: 4000m limits: memory: 16Gi cpu: 8000m
configuration: |- [mysqld] innodb_buffer_pool_size=12G innodb_buffer_pool_instances=12 innodb_log_file_size=2G innodb_flush_log_at_trx_commit=2 max_connections=2000
Backup-Optimized Configuration
Section titled “Backup-Optimized Configuration”# Enhanced backup configurationbackup: enabled: true cronjob: schedule: "0 */6 * * *" # Every 6 hours historyLimit: 14 persistence: size: 1Ti storageClass: "backup-storage"
🔄 Maintenance Schedule
Section titled “🔄 Maintenance Schedule”Daily Tasks
Section titled “Daily Tasks”- Monitor replication lag
- Check slow query log
- Verify backup completion
- Monitor disk usage
Weekly Tasks
Section titled “Weekly Tasks”- Analyze table statistics
- Review performance metrics
- Update database statistics
- Check for schema changes
Monthly Tasks
Section titled “Monthly Tasks”- Optimize frequently used tables
- Review and rotate logs
- Update security configurations
- Capacity planning review
📋 Operational Checklist
Section titled “📋 Operational Checklist”Pre-Deployment
Section titled “Pre-Deployment”- Storage classes configured
- Persistent volumes available
- Network policies defined
- Backup storage configured
- SSL certificates prepared
Post-Deployment
Section titled “Post-Deployment”- Primary database accessible
- Secondary replication working
- Backup jobs scheduled
- Monitoring alerts configured
- Application connectivity tested
Regular Maintenance
Section titled “Regular Maintenance”- Backup integrity verified
- Performance metrics reviewed
- Security updates applied
- Capacity planning updated
- Disaster recovery tested
🔗 Related Documentation
Section titled “🔗 Related Documentation”- Backend Application - Database integration
- Configuration Guide - Database configuration
- Security Guide - Database security
- Disaster Recovery - Backup strategies
The MariaDB database module provides enterprise-grade data management with high availability and automated operations.