5

I've successfully deployed in Kubernetes a InnoDB Cluster via mysql-operator and I've also set up the scheduled backup. I'm also able to init the DB via the same backup created by InnoDB.

However I can't find a way to init the DB the first time by importing a simple logical backup which is defined by a simple .sql script.

Is it possible to achieve that via mysql-operator or via InnoDB kubernetes manifest? Possible alternatives?

Relevant documentation:

InnoDBCluster manifest:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
  namespace: cr-platform
spec:
  secretName: mysql-root-user
  instances: 2
  tlsUseSelfSigned: true
  router:
    instances: 1
  backupSchedules:
    - name: daily-2300
      enabled: true
      schedule: "0 23 * * *"
      backupProfileName: s3-backup
  backupProfiles:
    - name: s3-backup
      dumpInstance:
        dumpOptions:
          chunking: false
        storage:
          s3:
            bucketName: al-mysql
            prefix: /backup
            config: s3-secret
            profile: default
            endpoint: https://s3-endpoint
  ## Restore from InnoDB dump but not from .sql script
  initDB:
    dump:
      dumpOptions:
        dryRun: false
      storage:
        # backup
        s3:
          bucketName: al-mysql
          prefix: /init
          config: s3-secret
          profile: default
          endpoint: https://s3-endpoint

1 Answer 1

0

The way I've found out is to execute a mysql client pod, do the login, and import the sql script.

# 1. deploy mysql-client
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-init
data:
  1-init.sql:
    # YOUR SQL INIT SCRIPT HERE
---
apiVersion: v1
kind: Pod
metadata:
  name: mysql-client
spec:
  containers:
  - name: mysql
    image: mysql:8.0
    ports:
    - containerPort: 80
    env:
    - name: MYSQL_ALLOW_EMPTY_PASSWORD
      value: "true"
    volumeMounts:
      - name: config-volume
        mountPath: /init/
  volumes:
    - name: config-volume
      configMap:
        # Provide the name of the ConfigMap containing the files you want
        # to add to the container
        name: mysql-init



# 2. run the import:
# enter the shell for the client pod and run the following commands by substituting:
# <MYSQL-SERVER-HOST> with the service name exposing the mysql-cluster on kubernetes cluster and <USER>/<PASSWORD> credentials with the ones defined as kubernetes secret in the mysql-cluster namespace


mysql -h <MYSQL-SERVER-HOST> -u<USER> -p<PASSWORD> -e 'SHOW databases;'
mysql -h <MYSQL-SERVER-HOST> -u<USER> -p<PASSWORD> < init/1-init.sql

Not the answer you're looking for? Browse other questions tagged or ask your own question.