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.