Skip to main content

MySQL/MariaDB Storage

MySQL and MariaDB are supported for organizations with existing MySQL infrastructure.

When to Use​

MySQL is ideal for:

  • Organizations standardized on MySQL/MariaDB
  • High-availability deployments
  • Large clusters
  • Integration with existing MySQL operations

Prerequisites​

  • MySQL 8.0+ or MariaDB 10.5+
  • Database created for CronJob Guardian
  • User with appropriate permissions

Configuration​

Create Credentials Secret​

kubectl create namespace cronjob-guardian
kubectl create secret generic mysql-credentials \
--namespace cronjob-guardian \
--from-literal=password=your-secure-password

Helm Values​

config:
storage:
type: mysql
mysql:
host: mysql.database.svc
port: 3306
database: guardian
username: guardian
existingSecret: mysql-credentials

persistence:
enabled: false

TLS Configuration​

Require TLS​

config:
storage:
mysql:
tls: true
tlsSkipVerify: false

Custom CA​

config:
storage:
mysql:
tls: true
tlsCA:
secretKeyRef:
name: mysql-ca
key: ca.crt

Connection Pool​

config:
storage:
mysql:
maxOpenConns: 25
maxIdleConns: 10
connMaxLifetime: 5m
connMaxIdleTime: 1m

Complete Example​

values-mysql.yaml
replicaCount: 2

leaderElection:
enabled: true

config:
storage:
type: mysql
mysql:
host: mysql.database.svc.cluster.local
port: 3306
database: cronjob_guardian
username: guardian
existingSecret: mysql-credentials
tls: true
maxOpenConns: 25
maxIdleConns: 10
connMaxLifetime: 5m
parseTime: true
charset: utf8mb4

persistence:
enabled: false

Database Setup​

Create Database​

CREATE DATABASE cronjob_guardian CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'guardian'@'%' IDENTIFIED BY 'secure-password';
GRANT ALL PRIVILEGES ON cronjob_guardian.* TO 'guardian'@'%';
FLUSH PRIVILEGES;

MariaDB​

Same syntax works for MariaDB:

CREATE DATABASE cronjob_guardian CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'guardian'@'%' IDENTIFIED BY 'secure-password';
GRANT ALL PRIVILEGES ON cronjob_guardian.* TO 'guardian'@'%';
FLUSH PRIVILEGES;

Managed MySQL​

AWS RDS MySQL​

config:
storage:
mysql:
host: guardian.xxx.us-east-1.rds.amazonaws.com
port: 3306
database: guardian
username: guardian
existingSecret: rds-credentials
tls: true

Google Cloud SQL​

config:
storage:
mysql:
host: 10.0.0.4
port: 3306
database: guardian
username: guardian
existingSecret: cloudsql-credentials
tls: false # If using Cloud SQL Proxy

Azure Database for MySQL​

config:
storage:
mysql:
host: guardian.mysql.database.azure.com
port: 3306
database: guardian
username: guardian@guardian
existingSecret: azure-mysql-credentials
tls: true

PlanetScale​

config:
storage:
mysql:
host: xxx.us-east-1.psdb.cloud
port: 3306
database: guardian
username: xxx
existingSecret: planetscale-credentials
tls: true

High Availability​

Run multiple replicas with leader election:

replicaCount: 2

leaderElection:
enabled: true
leaseDuration: 15s
renewDeadline: 10s
retryPeriod: 2s

config:
storage:
type: mysql
mysql:
host: mysql.database.svc
database: guardian
existingSecret: mysql-credentials

Character Set​

Use utf8mb4 for full Unicode support:

config:
storage:
mysql:
charset: utf8mb4
collation: utf8mb4_unicode_ci

Backup​

mysqldump​

mysqldump -h mysql.database.svc -u guardian -p cronjob_guardian > backup.sql

Restore​

mysql -h mysql.database.svc -u guardian -p cronjob_guardian < backup.sql

Troubleshooting​

Connection Refused​

  • Verify host and port
  • Check MySQL is running
  • Verify network policies allow connection

Access Denied​

  • Check username and password
  • Verify user has access from pod IP
  • Check GRANT statements

TLS Errors​

  • Verify TLS settings match server
  • Check CA certificate
  • Try tlsSkipVerify: true for testing (not production)

Character Set Issues​

  • Ensure database uses utf8mb4
  • Verify charset: utf8mb4 in configuration

Connection Pool Exhausted​

  • Increase maxOpenConns
  • Check MySQL max_connections setting
  • Review slow queries

Performance Tuning​

MySQL Server Settings​

Recommended MySQL settings for CronJob Guardian:

[mysqld]
max_connections = 200
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M

Index Optimization​

CronJob Guardian creates necessary indexes. For very large deployments, monitor query performance.