diff --git a/addons/index.yaml b/addons/index.yaml
index 4656839..2c87453 100644
--- a/addons/index.yaml
+++ b/addons/index.yaml
@@ -11,6 +11,9 @@ entries:
   mysql-cluster:
     - version: 8.0
       description: "The world's most popular open source database cluster."
+  mysql-basic:
+    - version: 8.0
+      description: "The world's most popular open source database."
   minio:
     - version: 2023
       description: "MinIO offers high-performance, S3 compatible object storage."
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/.helmignore b/addons/mysql-basic/8.0/chart/mysql-basic/.helmignore
new file mode 100644
index 0000000..f0c1319
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/.helmignore
@@ -0,0 +1,21 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/Chart.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/Chart.yaml
new file mode 100644
index 0000000..8b3d99c
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/Chart.yaml
@@ -0,0 +1,28 @@
+annotations:
+  category: Database
+apiVersion: v2
+appVersion: 8.0.35
+dependencies:
+  - name: common
+    repository: oci://registry.drycc.cc/charts
+    tags:
+      - drycc-common
+    version: ~1.1.2
+description: MySQL is a fast, reliable, scalable, and easy to use open source relational database system. Designed to handle mission-critical, heavy-load production applications.
+engine: gotpl
+home: https://github.com/drycc/charts/tree/master/drycc/mysql
+icon: https://drycc.com/assets/stacks/mysql/img/mysql-stack-220x234.png
+keywords:
+  - mysql
+  - database
+  - sql
+  - cluster
+  - high availability
+maintainers:
+  - name: Drycc
+    url: https://github.com/drycc/charts
+name: mysql
+sources:
+  - https://github.com/drycc/containers/tree/main/drycc/mysql
+  - https://mysql.com
+version: 8.0.35
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/NOTES.txt b/addons/mysql-basic/8.0/chart/mysql-basic/templates/NOTES.txt
new file mode 100644
index 0000000..ecf604c
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/NOTES.txt
@@ -0,0 +1,75 @@
+CHART NAME: {{ .Chart.Name }}
+CHART VERSION: {{ .Chart.Version }}
+APP VERSION: {{ .Chart.AppVersion }}
+
+** Please be patient while the chart is being deployed **
+
+{{- if .Values.diagnosticMode.enabled }}
+The chart has been deployed in diagnostic mode. All probes have been disabled and the command has been overwritten with:
+
+  command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 4 }}
+  args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 4 }}
+
+Get the list of pods by executing:
+
+  kubectl get pods --namespace {{ include "common.names.namespace" . }} -l app.kubernetes.io/instance={{ .Release.Name }}
+
+Access the pod you want to debug by executing
+
+  kubectl exec --namespace {{ include "common.names.namespace" . }} -ti <NAME OF THE POD> -- bash
+
+In order to replicate the container startup scripts execute this command:
+
+    /opt/bitnami/scripts/mysql/entrypoint.sh /opt/bitnami/scripts/mysql/run.sh
+
+{{- else }}
+
+Tip:
+
+  Watch the deployment status using the command: kubectl get pods -w --namespace {{ include "common.names.namespace" . }}
+
+Services:
+
+  echo Primary: {{ include "mysql.primary.fullname" . }}.{{ include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}:{{ .Values.primary.service.ports.mysql }}
+{{- if eq .Values.architecture "replication" }}
+  echo Secondary: {{ include "mysql.secondary.fullname" . }}.{{ include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}:{{ .Values.secondary.service.ports.mysql }}
+{{- end }}
+
+Execute the following to get the administrator credentials:
+
+  echo Username: root
+  MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace {{ include "common.names.namespace" . }} {{ template "mysql.secretName" . }} -o jsonpath="{.data.mysql-root-password}" | base64 -d)
+
+To connect to your database:
+
+  1. Run a pod that you can use as a client:
+
+      kubectl run {{ include "common.names.fullname" . }}-client --rm --tty -i --restart='Never' --image  {{ template "mysql.image" . }} --namespace {{ include "common.names.namespace" . }} --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
+
+  2. To connect to primary service (read/write):
+
+      mysql -h {{ include "mysql.primary.fullname" . }}.{{ include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }} -uroot -p"$MYSQL_ROOT_PASSWORD"
+
+{{- if eq .Values.architecture "replication" }}
+
+  3. To connect to secondary service (read-only):
+
+      mysql -h {{ include "mysql.secondary.fullname" . }}.{{ include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }} -uroot -p"$MYSQL_ROOT_PASSWORD"
+{{- end }}
+
+{{ if and (.Values.networkPolicy.enabled) (not .Values.networkPolicy.allowExternal) }}
+Note: Since NetworkPolicy is enabled, only pods with label {{ template "common.names.fullname" . }}-client=true" will be able to connect to MySQL.
+{{- end }}
+
+{{- if .Values.metrics.enabled }}
+
+To access the MySQL Prometheus metrics from outside the cluster execute the following commands:
+
+    kubectl port-forward --namespace {{ include "common.names.namespace" . }} svc/{{ printf "%s-metrics" (include "common.names.fullname" .) }} {{ .Values.metrics.service.port }}:{{ .Values.metrics.service.port }} &
+    curl http://127.0.0.1:{{ .Values.metrics.service.port }}/metrics
+
+{{- end }}
+
+{{ include "mysql.validateValues" . }}
+{{ include "mysql.checkRollingTags" . }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/_helpers.tpl b/addons/mysql-basic/8.0/chart/mysql-basic/templates/_helpers.tpl
new file mode 100644
index 0000000..b350f2d
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/_helpers.tpl
@@ -0,0 +1,206 @@
+{{/*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{/* vim: set filetype=mustache: */}}
+
+{{- define "mysql.primary.fullname" -}}
+{{- if eq .Values.architecture "replication" }}
+{{- printf "%s-%s" (include "common.names.fullname" .) .Values.primary.name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- include "common.names.fullname" . -}}
+{{- end -}}
+{{- end -}}
+
+{{- define "mysql.router.fullname" -}}
+{{- printf "%s-%s" (include "common.names.fullname" .) .Values.router.name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+
+{{- define "mysql.cluster.fullname" -}}
+{{- printf "%s-%s" (include "common.names.fullname" .) .Values.cluster.name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Return the proper MySQL image name
+*/}}
+{{- define "mysql.image" -}}
+{{- include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return the proper Router image name
+*/}}
+{{- define "router.image" -}}
+{{- include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return the proper Cluster image name
+*/}}
+{{- define "cluster.image" -}}
+{{- include "common.images.image" (dict "imageRoot" .Values.cluster.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return the proper metrics image name
+*/}}
+{{- define "mysql.metrics.image" -}}
+{{- include "common.images.image" (dict "imageRoot" .Values.metrics.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return the proper image name (for the init container volume-permissions image)
+*/}}
+{{- define "mysql.volumePermissions.image" -}}
+{{- include "common.images.image" (dict "imageRoot" .Values.volumePermissions.image "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Return the proper Docker Image Registry Secret Names
+*/}}
+{{- define "mysql.imagePullSecrets" -}}
+{{- include "common.images.pullSecrets" (dict "images" (list .Values.image .Values.metrics.image .Values.volumePermissions.image) "global" .Values.global) }}
+{{- end -}}
+
+{{/*
+Get the initialization scripts ConfigMap name.
+*/}}
+{{- define "mysql.initdbScriptsCM" -}}
+{{- if .Values.initdbScriptsConfigMap -}}
+    {{- printf "%s" (tpl .Values.initdbScriptsConfigMap $) -}}
+{{- else -}}
+    {{- printf "%s-init-scripts" (include "mysql.primary.fullname" .) -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+ Returns the proper service account name depending if an explicit service account name is set
+ in the values file. If the name is not set it will default to either mysql.fullname if serviceAccount.create
+ is true or default otherwise.
+*/}}
+{{- define "mysql.serviceAccountName" -}}
+    {{- if .Values.serviceAccount.create -}}
+        {{ default (include "common.names.fullname" .) .Values.serviceAccount.name }}
+    {{- else -}}
+        {{ default "default" .Values.serviceAccount.name }}
+    {{- end -}}
+{{- end -}}
+
+{{/*
+Return the configmap with the MySQL Primary configuration
+*/}}
+{{- define "mysql.primary.configmapName" -}}
+{{- if .Values.primary.existingConfigmap -}}
+    {{- printf "%s" (tpl .Values.primary.existingConfigmap $) -}}
+{{- else -}}
+    {{- printf "%s" (include "mysql.primary.fullname" .) -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return the configmap with the MySQL Router configuration
+*/}}
+{{- define "mysql.router.configmapName" -}}
+{{- if .Values.router.existingConfigmap -}}
+    {{- printf "%s" (tpl .Values.router.existingConfigmap $) -}}
+{{- else -}}
+    {{- printf "%s-router" (include "common.names.fullname" .) -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return true if a configmap object should be created for MySQL Secondary
+*/}}
+{{- define "mysql.primary.createConfigmap" -}}
+{{- if and .Values.primary.configuration (not .Values.primary.existingConfigmap) }}
+    {{- true -}}
+{{- else -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return true if a configmap object should be created for MySQL router
+*/}}
+{{- define "mysql.router.createConfigmap" -}}
+{{- if and .Values.router.configuration (not .Values.router.existingConfigmap) }}
+    {{- true -}}
+{{- else -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return the configmap with the MySQL Primary configuration
+*/}}
+{{- define "mysql.secondary.configmapName" -}}
+{{- if .Values.secondary.existingConfigmap -}}
+    {{- printf "%s" (tpl .Values.secondary.existingConfigmap $) -}}
+{{- else -}}
+    {{- printf "%s" (include "mysql.secondary.fullname" .) -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return true if a configmap object should be created for MySQL Secondary
+*/}}
+{{- define "mysql.secondary.createConfigmap" -}}
+{{- if and (eq .Values.architecture "replication") .Values.secondary.configuration (not .Values.secondary.existingConfigmap) }}
+    {{- true -}}
+{{- else -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return the secret with MySQL credentials
+*/}}
+{{- define "mysql.secretName" -}}
+    {{- if .Values.auth.existingSecret -}}
+        {{- printf "%s" (tpl .Values.auth.existingSecret $) -}}
+    {{- else -}}
+        {{- printf "%s" (include "common.names.fullname" .) -}}
+    {{- end -}}
+{{- end -}}
+
+{{/*
+Return true if a secret object should be created for MySQL
+*/}}
+{{- define "mysql.createSecret" -}}
+{{- if and (not .Values.auth.existingSecret) (not .Values.auth.customPasswordFiles) }}
+    {{- true -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Returns the available value for certain key in an existing secret (if it exists),
+otherwise it generates a random value.
+*/}}
+{{- define "getValueFromSecret" }}
+    {{- $len := (default 16 .Length) | int -}}
+    {{- $obj := (lookup "v1" "Secret" .Namespace .Name).data -}}
+    {{- if $obj }}
+        {{- index $obj .Key | b64dec -}}
+    {{- else -}}
+        {{- randAlphaNum $len -}}
+    {{- end -}}
+{{- end }}
+
+{{/* Check if there are rolling tags in the images */}}
+{{- define "mysql.checkRollingTags" -}}
+{{- include "common.warnings.rollingTag" .Values.image }}
+{{- include "common.warnings.rollingTag" .Values.metrics.image }}
+{{- include "common.warnings.rollingTag" .Values.volumePermissions.image }}
+{{- end -}}
+
+{{/*
+Compile all warnings into a single message, and call fail.
+*/}}
+{{- define "mysql.validateValues" -}}
+{{- $messages := list -}}
+{{- $messages := without $messages "" -}}
+{{- $message := join "\n" $messages -}}
+
+{{- if $message -}}
+{{- printf "\nVALUES VALIDATION:\n%s" $message | fail -}}
+{{- end -}}
+{{- end -}}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/cluster/cronjob.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/cluster/cronjob.yaml
new file mode 100644
index 0000000..8728ff8
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/cluster/cronjob.yaml
@@ -0,0 +1,96 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+{{- if .Values.backup.enabled }}
+apiVersion: {{ include "common.capabilities.cronjob.apiVersion" . }}
+kind: CronJob
+metadata:
+  name: {{ include "mysql.cluster.fullname" . }}-backup
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: primary
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+
+spec:
+  schedule: {{ .Values.backup.schedule| quote }}
+  concurrencyPolicy: Forbid
+  failedJobsHistoryLimit: 1
+  jobTemplate:
+    metadata:
+    spec:
+      template:
+        spec: 
+          restartPolicy: OnFailure
+          initContainers:
+            - name: backup-wait
+              image: registry.drycc.cc/drycc/python-dev:latest
+              imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
+              args:
+              - netcat
+              - -v
+              - -u
+              - mysql://$(MYSQL_HOST):$(MYSQL_PORT_NUMBER)
+
+              env:
+                - name: MYSQL_HOST
+                  value: {{ include "mysql.router.fullname" . }}
+                - name: MYSQL_PORT_NUMBER
+                  value: {{ .Values.router.service.portro | quote }}
+                      
+          containers:         
+            - name: backup-cron
+              image: {{ include "cluster.image" . }}
+              imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
+              {{- if .Values.primary.containerSecurityContext.enabled }}
+              securityContext: {{- omit .Values.primary.containerSecurityContext "enabled" | toYaml | nindent 14 }}
+              {{- end }}
+              command: 
+                - /bin/bash
+                - -ec
+                - |   
+                  # create file
+                  echo "
+                  import os
+                  from datetime import datetime, timezone, timedelta
+
+                  now_utc = datetime.now(timezone.utc)
+                  cst_timezone = timezone(timedelta(hours=8))
+                  now_cst = now_utc.astimezone(cst_timezone)
+                  now_str =  now_cst.strftime('%Y%m%d%H%M')
+                  endpoint=os.getenv('AWS_ENDPOINT_URL')
+                  bucket_name=os.getenv('AWS_BUCKET_NAME')
+
+                  util.dump_instance(now_str, {'s3BucketName': bucket_name, 's3EndpointOverride': endpoint, 'threads': 1, 'maxRate': '8M', 'compatibility': ['strip_restricted_grants', 'strip_definers', 'ignore_missing_pks'] ,'excludeSchemas': ['mysql_innodb_cluster_metadata','sys','information_schema','performance_schema','mondb'],'compatibility':['strip_restricted_grants', 'strip_definers', 'ignore_missing_pks'] })
+                  " > /tmp/dump_instance.py
+
+                  mysqlsh --uri=${MYSQL_ROOT_USER}@${MYSQL_HOST}:${MYSQL_PORT_NUMBER} -p${MYSQL_ROOT_PASSWORD} --py < /tmp/dump_instance.py
+
+              env:
+                - name: MYSQL_HOST
+                  value: {{ include "mysql.primary.fullname" . }}
+                - name: MYSQL_PORT_NUMBER
+                  value:  {{.Values.primary.service.ports | quote }}
+                - name: MYSQL_ROOT_USER
+                  value: "root"
+                - name: MYSQL_ROOT_PASSWORD
+                  valueFrom:
+                    secretKeyRef:
+                      name: {{ template "mysql.secretName" . }}
+                      key: mysql-root-password
+                - name: AWS_ENDPOINT_URL
+                  value: {{ .Values.backup.s3.endpoint | quote }}
+                - name: AWS_BUCKET_NAME
+                  value: {{ .Values.backup.s3.bucketName | quote }}
+                - name: AWS_ACCESS_KEY_ID
+                  value: {{ .Values.backup.s3.accessKey | quote }}
+                - name: AWS_SECRET_ACCESS_KEY
+                  value: {{ .Values.backup.s3.secretKey | quote }}
+                - name: AWS_DEFAULT_REGION
+                  value: {{ .Values.backup.s3.region | quote }}
+{{- end }}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/extra-list.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/extra-list.yaml
new file mode 100644
index 0000000..9570df4
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/extra-list.yaml
@@ -0,0 +1,9 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- range .Values.extraDeploy }}
+---
+{{ include "common.tplvalues.render" (dict "value" . "context" $) }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/metrics-svc.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/metrics-svc.yaml
new file mode 100644
index 0000000..adc5dfb
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/metrics-svc.yaml
@@ -0,0 +1,37 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.metrics.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ printf "%s-metrics" (include "common.names.fullname" .) }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+    app.kubernetes.io/component: metrics
+  {{- if or .Values.metrics.service.annotations .Values.commonAnnotations }}
+  annotations:
+    {{- if .Values.metrics.service.annotations }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.metrics.service.annotations "context" $) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.commonAnnotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- end }}
+spec:
+  type: {{ .Values.metrics.service.type }}
+  {{- if and .Values.metrics.service.clusterIP (eq .Values.metrics.service.type "ClusterIP") }}
+  clusterIP: {{ .Values.metrics.service.clusterIP }}
+  {{- end }}
+  ports:
+    - port: {{ .Values.metrics.service.port }}
+      targetPort: metrics
+      protocol: TCP
+      name: metrics
+  selector: {{- include "common.labels.matchLabels" $ | nindent 4 }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/networkpolicy.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/networkpolicy.yaml
new file mode 100644
index 0000000..4e443e3
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/networkpolicy.yaml
@@ -0,0 +1,51 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.networkPolicy.enabled }}
+kind: NetworkPolicy
+apiVersion: {{ template "common.capabilities.networkPolicy.apiVersion" . }}
+metadata:
+  name: {{ template "common.names.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  podSelector:
+    matchLabels:
+      {{- include "common.labels.matchLabels" . | nindent 6 }}
+  {{- if eq .Values.primary.service.type "ClusterIP" }}
+  ingress:
+    # Allow inbound connections
+    - ports:
+      - port: {{ .Values.primary.service.ports.mysql }}
+    {{- if and .Values.metrics.enabled }}
+      - port: {{ .Values.metrics.service.port }}
+    {{- end }} 
+    {{- if or .Values.networkPolicy.allowCurrentNamespace .Values.networkPolicy.allowNamespaces }}
+      from:
+      {{- if .Values.networkPolicy.allowCurrentNamespace }}
+        - namespaceSelector:
+            matchLabels:
+              kubernetes.io/metadata.name: {{ .Release.Namespace }}
+      {{- end }}
+      {{- range $namespace := .Values.networkPolicy.allowNamespaces }}
+        {{- if $namespace }}
+        - namespaceSelector:
+            matchLabels:
+              kubernetes.io/metadata.name: {{ $namespace }}
+        {{- end }}
+      {{- end }}
+    {{- end }}
+  {{- end }}
+  {{- if eq .Values.primary.service.type "LoadBalancer" }}
+  ingress:
+    - {}
+  {{- end}}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/configmap.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/configmap.yaml
new file mode 100644
index 0000000..2f49775
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/configmap.yaml
@@ -0,0 +1,24 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if (include "mysql.primary.createConfigmap" .) }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ include "mysql.primary.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: primary
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+data:
+  my.cnf: |-
+    {{- include "common.tplvalues.render" ( dict "value" .Values.primary.configuration "context" $ ) | nindent 4 }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.primary.extraConfig "context" $ ) | nindent 4 }}
+{{- end -}}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/initialization-configmap.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/initialization-configmap.yaml
new file mode 100644
index 0000000..d0d9fc8
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/initialization-configmap.yaml
@@ -0,0 +1,22 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.initdbScripts (not .Values.initdbScriptsConfigMap) }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ printf "%s-init-scripts" (include "mysql.primary.fullname" .) }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: primary
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+data:
+{{- include "common.tplvalues.render" (dict "value" .Values.initdbScripts "context" .) | nindent 2 }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/pdb.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/pdb.yaml
new file mode 100644
index 0000000..ee9ede0
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/pdb.yaml
@@ -0,0 +1,30 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.primary.pdb.create }}
+apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
+kind: PodDisruptionBudget
+metadata:
+  name: {{ include "mysql.primary.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: primary
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  {{- if .Values.primary.pdb.minAvailable }}
+  minAvailable: {{ .Values.primary.pdb.minAvailable }}
+  {{- end }}
+  {{- if .Values.primary.pdb.maxUnavailable }}
+  maxUnavailable: {{ .Values.primary.pdb.maxUnavailable }}
+  {{- end }}
+  selector:
+    matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
+      app.kubernetes.io/component: primary
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/statefulset.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/statefulset.yaml
new file mode 100644
index 0000000..2789215
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/statefulset.yaml
@@ -0,0 +1,396 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: {{ include "common.capabilities.statefulset.apiVersion" . }}
+kind: StatefulSet
+metadata:
+  name: {{ include "mysql.primary.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: primary
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  replicas: 1
+  podManagementPolicy: {{ .Values.primary.podManagementPolicy | quote }}
+  selector:
+    matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
+      app.kubernetes.io/component: primary
+  serviceName: {{ include "mysql.primary.fullname" . }}
+  {{- if .Values.primary.updateStrategy }}
+  updateStrategy: {{- toYaml .Values.primary.updateStrategy | nindent 4 }}
+  {{- end }}
+  template:
+    metadata:
+      annotations:
+        {{- if (include "mysql.primary.createConfigmap" .) }}
+        checksum/configuration: {{ include (print $.Template.BasePath "/primary/configmap.yaml") . | sha256sum }}
+        {{- end }}
+        {{- if .Values.primary.podAnnotations }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.primary.podAnnotations "context" $) | nindent 8 }}
+        {{- end }}
+      labels: {{- include "common.labels.standard" . | nindent 8 }}
+        app.kubernetes.io/component: primary
+        {{- if .Values.primary.podLabels }}
+        {{- include "common.tplvalues.render" ( dict "value" .Values.primary.podLabels "context" $ ) | nindent 8 }}
+        {{- end }}
+    spec:
+      serviceAccountName: {{ template "mysql.serviceAccountName" . }}
+      {{- include "mysql.imagePullSecrets" . | nindent 6 }}
+      {{- if .Values.primary.hostAliases }}
+      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.primary.hostAliases "context" $) | nindent 8 }}
+      {{- end }}
+      subdomain: {{ include "mysql.primary.fullname" . }}
+      dnsConfig: 
+        searches:
+          - {{ include "mysql.primary.fullname" . }}.{{ include "common.names.namespace" . }}.svc.cluster.local
+      {{- if .Values.primary.affinity }}
+      affinity: {{- include "common.tplvalues.render" (dict "value" .Values.primary.affinity "context" $) | nindent 8 }}
+      {{- else }}
+      affinity:
+        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.primary.podAffinityPreset "context" $) | nindent 10 }}
+        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.primary.podAntiAffinityPreset "context" $) | nindent 10 }}
+        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.primary.nodeAffinityPreset.type "key" .Values.primary.nodeAffinityPreset.key "values" .Values.primary.nodeAffinityPreset.values) | nindent 10 }}
+      {{- end }}
+      {{- if .Values.primary.nodeSelector }}
+      nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.primary.nodeSelector "context" $) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.primary.tolerations }}
+      tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.primary.tolerations "context" $) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.primary.priorityClassName }}
+      priorityClassName: {{ .Values.primary.priorityClassName | quote }}
+      {{- end }}
+      {{- if .Values.primary.runtimeClassName }}
+      runtimeClassName: {{ .Values.primary.runtimeClassName | quote }}
+      {{- end }}
+      {{- if .Values.primary.schedulerName }}
+      schedulerName: {{ .Values.primary.schedulerName | quote }}
+      {{- end }}
+      {{- if .Values.primary.topologySpreadConstraints }}
+      topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.primary.topologySpreadConstraints "context" .) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.primary.podSecurityContext.enabled }}
+      securityContext: {{- omit .Values.primary.podSecurityContext "enabled" | toYaml | nindent 8 }}
+      {{- end }}
+      {{- if .Values.primary.terminationGracePeriodSeconds }}
+      terminationGracePeriodSeconds: {{ .Values.primary.terminationGracePeriodSeconds }}
+      {{- end }}
+      initContainers:
+        {{- if and .Values.primary.podSecurityContext.enabled .Values.volumePermissions.enabled .Values.primary.persistence.enabled }}
+        - name: volume-permissions
+          image: {{ include "mysql.volumePermissions.image" . }}
+          imagePullPolicy: {{ .Values.volumePermissions.image.pullPolicy | quote }}
+          command:
+            - /bin/bash
+            - -ec
+            - |
+              mkdir -p "/drycc/mysql"
+              chown "{{ .Values.primary.containerSecurityContext.runAsUser }}:{{ .Values.primary.podSecurityContext.fsGroup }}" "/drycc/mysql"
+              find "/drycc/mysql" -mindepth 1 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | xargs -r chown -R "{{ .Values.primary.containerSecurityContext.runAsUser }}:{{ .Values.primary.podSecurityContext.fsGroup }}"
+          securityContext:
+            runAsUser: 0
+          {{- if .Values.volumePermissions.resources }}
+          resources: {{- toYaml .Values.volumePermissions.resources | nindent 12 }}
+          {{- end }}
+          volumeMounts:
+            - name: data
+              mountPath: /drycc/mysql
+              {{- if .Values.primary.persistence.subPath }}
+              subPath: {{ .Values.primary.persistence.subPath }}
+              {{- end }}
+        {{- end }}
+        {{- if .Values.primary.initContainers }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.primary.initContainers "context" $) | nindent 8 }}
+        {{- end }}
+      containers:
+        - name: mysql
+          image: {{ include "mysql.image" . }}
+          imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
+          {{- if .Values.primary.containerSecurityContext.enabled }}
+          securityContext: {{- omit .Values.primary.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+          {{- end }}
+          {{- if .Values.diagnosticMode.enabled }}
+          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
+          {{- else if .Values.primary.command }}
+          command: {{- include "common.tplvalues.render" (dict "value" .Values.primary.command "context" $) | nindent 12 }}
+          {{- end }}
+          {{- if .Values.diagnosticMode.enabled }}
+          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
+          {{- else if .Values.primary.args }}
+          args: {{- include "common.tplvalues.render" (dict "value" .Values.primary.args "context" $) | nindent 12 }}
+          {{- end }}
+          {{- if .Values.primary.lifecycleHooks }}
+          lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.primary.lifecycleHooks "context" $) | nindent 12 }}
+          {{- end }}
+          env:
+            - name: DRYCC_DEBUG
+              value: {{ ternary "true" "false" (or .Values.image.debug .Values.diagnosticMode.enabled) | quote }}
+            {{- if .Values.auth.usePasswordFiles }}
+            - name: MYSQL_ROOT_PASSWORD_FILE
+              value: {{ default "/opt/drycc/mysql/secrets/mysql-root-password" .Values.auth.customPasswordFiles.root }}
+            {{- else }}
+            - name: MYSQL_ROOT_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: {{ template "mysql.secretName" . }}
+                  key: mysql-root-password
+            {{- end }}
+            {{- if not (empty .Values.auth.username) }}
+            - name: MYSQL_USER
+              value: {{ .Values.auth.username | quote }}
+            {{- if .Values.auth.usePasswordFiles }}
+            - name: MYSQL_PASSWORD_FILE
+              value: {{ default "/opt/drycc/mysql/secrets/mysql-password" .Values.auth.customPasswordFiles.user }}
+            {{- else }}
+            - name: MYSQL_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: {{ template "mysql.secretName" . }}
+                  key: mysql-password
+            {{- end }}
+            {{- end }}
+            {{- if and .Values.auth.createDatabase .Values.auth.database }}
+            - name: MYSQL_DATABASE
+              value: {{ .Values.auth.database | quote }}
+            {{- end }}
+            {{- if or (eq .Values.architecture "replication") (eq .Values.architecture "mgr") }}
+            - name: MYSQL_REPLICATION_MODE
+              value: "master"
+            {{- if .Values.auth.usePasswordFiles }}
+            - name: MYSQL_REPLICATION_PASSWORD_FILE
+              value: {{ default "/opt/drycc/mysql/secrets/mysql-replication-password" .Values.auth.customPasswordFiles.replicator }}
+            {{- else }}
+            {{- end }}
+            {{- end }}
+            {{- if .Values.primary.extraFlags }}
+            - name: MYSQL_EXTRA_FLAGS
+              value: "{{ .Values.primary.extraFlags }}"
+            {{- end }}
+            {{- if .Values.primary.extraEnvVars }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.primary.extraEnvVars "context" $) | nindent 12 }}
+            {{- end }}
+          envFrom:
+            {{- if .Values.primary.extraEnvVarsCM }}
+            - configMapRef:
+                name: {{ include "common.tplvalues.render" (dict "value" .Values.primary.extraEnvVarsCM "context" $) }}
+            {{- end }}
+            {{- if .Values.primary.extraEnvVarsSecret }}
+            - secretRef:
+                name: {{ include "common.tplvalues.render" (dict "value" .Values.primary.extraEnvVarsSecret "context" $) }}
+            {{- end }}
+          ports:
+            - name: mysql
+              containerPort: 3306
+            {{- if .Values.primary.extraPorts }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.primary.extraPorts "context" $) | nindent 12 }}
+            {{- end }}
+          {{- if not .Values.diagnosticMode.enabled }}
+          {{- if .Values.primary.customLivenessProbe }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.primary.customLivenessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.primary.livenessProbe.enabled }}
+          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.primary.livenessProbe "enabled") "context" $) | nindent 12 }}
+            exec:
+              command:
+                - /bin/bash
+                - -ec
+                - |
+                  password_aux="${MYSQL_ROOT_PASSWORD:-}"
+                  if [[ -f "${MYSQL_ROOT_PASSWORD_FILE:-}" ]]; then
+                      password_aux=$(cat "$MYSQL_ROOT_PASSWORD_FILE")
+                  fi
+                  mysqladmin ping -uroot -h127.0.0.1 -p"${password_aux}"
+          {{- end }}
+          {{- if .Values.primary.customReadinessProbe }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.primary.customReadinessProbe "context" $) | nindent 12 }}
+          {{- else if .Values.primary.readinessProbe.enabled }}
+          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.primary.readinessProbe "enabled") "context" $) | nindent 12 }}
+            exec:
+              command:
+                - /bin/bash
+                - -ec
+                - |
+                  password_aux="${MYSQL_ROOT_PASSWORD:-}"
+                  if [[ -f "${MYSQL_ROOT_PASSWORD_FILE:-}" ]]; then
+                      password_aux=$(cat "$MYSQL_ROOT_PASSWORD_FILE")
+                  fi
+                  mysqladmin ping -uroot -h127.0.0.1 -p"${password_aux}"
+          {{- end }}
+          {{- if .Values.primary.customStartupProbe }}
+          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.primary.customStartupProbe "context" $) | nindent 12 }}
+          {{- else if .Values.primary.startupProbe.enabled }}
+          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.primary.startupProbe "enabled") "context" $) | nindent 12 }}
+            exec:
+              command:
+                - /bin/bash
+                - -ec
+                - |
+                  password_aux="${MYSQL_ROOT_PASSWORD:-}"
+                  if [[ -f "${MYSQL_ROOT_PASSWORD_FILE:-}" ]]; then
+                      password_aux=$(cat "$MYSQL_ROOT_PASSWORD_FILE")
+                  fi
+                  mysqladmin ping -uroot -h127.0.0.1 -p"${password_aux}"
+          {{- end }}
+          {{- end }}
+          {{- if .Values.primary.resources }}
+          resources: {{ toYaml .Values.primary.resources | nindent 12 }}
+          {{- end }}
+          volumeMounts:
+            - name: data
+              mountPath: /drycc/mysql
+              {{- if .Values.primary.persistence.subPath }}
+              subPath: {{ .Values.primary.persistence.subPath }}
+              {{- end }}
+            {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
+            - name: custom-init-scripts
+              mountPath: /docker-entrypoint-initdb.d
+            {{- end }}
+            {{- if or .Values.primary.configuration .Values.primary.existingConfigmap }}
+            - name: config
+              mountPath: /opt/drycc/mysql/conf/my.cnf
+              subPath: my.cnf
+            {{- end }}
+            {{- if and .Values.auth.usePasswordFiles (not .Values.auth.customPasswordFiles) }}
+            - name: mysql-credentials
+              mountPath: /opt/drycc/mysql/secrets/
+            {{- end }}
+            {{- if .Values.primary.extraVolumeMounts }}
+            {{- include "common.tplvalues.render" (dict "value" .Values.primary.extraVolumeMounts "context" $) | nindent 12 }}
+            {{- end }}
+        {{- if .Values.metrics.enabled }}
+        - name: metrics
+          image: {{ include "mysql.metrics.image" . }}
+          imagePullPolicy: {{ .Values.metrics.image.pullPolicy | quote }}
+          {{- if .Values.metrics.containerSecurityContext.enabled }}
+          securityContext: {{- omit .Values.metrics.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+          {{- end }}
+          env:
+            {{- if .Values.auth.usePasswordFiles }}
+            - name: MYSQL_ROOT_PASSWORD_FILE
+              value: {{ default "/opt/drycc/mysqld-exporter/secrets/mysql-root-password" .Values.auth.customPasswordFiles.root }}
+            {{- else }}
+            - name: MYSQL_ROOT_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: {{ include "mysql.secretName" . }}
+                  key: mysql-root-password
+            {{- end }}
+          {{- if .Values.diagnosticMode.enabled }}
+          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
+          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
+          {{- else }}
+          command:
+            - /bin/bash
+            - -ec
+            - |
+              password_aux="${MYSQL_ROOT_PASSWORD:-}"
+              if [[ -f "${MYSQL_ROOT_PASSWORD_FILE:-}" ]]; then
+                  password_aux=$(cat "$MYSQL_ROOT_PASSWORD_FILE")
+              fi
+              MYSQLD_EXPORTER_PASSWORD=${password_aux} /opt/drycc/mysqld_exporter/bin/mysqld_exporter --mysqld.address=localhost:3306 --mysqld.username=root {{- range .Values.metrics.extraArgs.primary }} {{ . }} {{- end }}
+          {{- end }}
+          ports:
+            - name: metrics
+              containerPort: 9104
+          {{- if not .Values.diagnosticMode.enabled }}
+          {{- if .Values.metrics.livenessProbe.enabled }}
+          livenessProbe: {{- omit .Values.metrics.livenessProbe "enabled" | toYaml | nindent 12 }}
+            httpGet:
+              path: /metrics
+              port: metrics
+          {{- end }}
+          {{- if .Values.metrics.readinessProbe.enabled }}
+          readinessProbe: {{- omit .Values.metrics.readinessProbe "enabled" | toYaml | nindent 12 }}
+            httpGet:
+              path: /metrics
+              port: metrics
+          {{- end }}
+          {{- end }}
+          {{- if .Values.metrics.resources }}
+          resources: {{- toYaml .Values.metrics.resources | nindent 12 }}
+          {{- end }}
+          {{- if and .Values.auth.usePasswordFiles (not .Values.auth.customPasswordFiles) }}
+          volumeMounts:
+            - name: mysql-credentials
+              mountPath: /opt/drycc/mysqld-exporter/secrets/
+          {{- end }}
+        {{- end }}
+        {{- if .Values.primary.sidecars }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.primary.sidecars "context" $) | nindent 8 }}
+        {{- end }}
+      volumes:
+        {{- if or .Values.primary.configuration .Values.primary.existingConfigmap }}
+        - name: config
+          configMap:
+            name: {{ include "mysql.primary.configmapName" . }}
+        {{- end }}
+        {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
+        - name: custom-init-scripts
+          configMap:
+            name: {{ include "mysql.initdbScriptsCM" . }}
+        {{- end }}
+        {{- if and .Values.auth.usePasswordFiles (not .Values.auth.customPasswordFiles) }}
+        - name: mysql-credentials
+          secret:
+            secretName: {{ include "mysql.secretName" . }}
+            items:
+              - key: mysql-root-password
+                path: mysql-root-password
+              - key: mysql-password
+                path: mysql-password
+              {{- if or (eq .Values.architecture "replication") (eq .Values.architecture "mgr") }}
+              - key: mysql-replication-password
+                path: mysql-replication-password
+              {{- end }}
+        {{- end }}
+        {{- if .Values.primary.extraVolumes }}
+        {{- include "common.tplvalues.render" (dict "value" .Values.primary.extraVolumes "context" $) | nindent 8 }}
+        {{- end }}
+  {{- if and .Values.primary.persistence.enabled .Values.primary.persistence.existingClaim }}
+        - name: data
+          persistentVolumeClaim:
+            claimName: {{ tpl .Values.primary.persistence.existingClaim . }}
+  {{- else if not .Values.primary.persistence.enabled }}
+        - name: data
+          emptyDir: {}
+  {{- else if and .Values.primary.persistence.enabled (not .Values.primary.persistence.existingClaim) }}
+  {{- if .Values.primary.persistentVolumeClaimRetentionPolicy.enabled }}
+  persistentVolumeClaimRetentionPolicy:
+    whenDeleted: {{ .Values.primary.persistentVolumeClaimRetentionPolicy.whenDeleted }}
+    whenScaled: {{ .Values.primary.persistentVolumeClaimRetentionPolicy.whenScaled }}
+  {{- end }}
+  volumeClaimTemplates:
+    - metadata:
+        name: data
+        labels: {{ include "common.labels.matchLabels" . | nindent 10 }}
+          app.kubernetes.io/component: primary
+          {{- if .Values.commonLabels }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.commonLabels "context" $) | nindent 10 }}
+          {{- end }}
+        annotations:
+          {{- if .Values.primary.persistence.annotations }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.primary.persistence.annotations "context" $) | nindent 10 }}
+          {{- end }}
+          {{- if .Values.commonAnnotations }}
+          {{- include "common.tplvalues.render" (dict "value" .Values.commonAnnotations "context" $) | nindent 10 }}
+          {{- end }}
+      spec:
+        accessModes:
+          {{- range .Values.primary.persistence.accessModes }}
+          - {{ . | quote }}
+          {{- end }}
+        resources:
+          requests:
+            storage: {{ .Values.primary.persistence.size | quote }}
+        {{- include "common.storage.class" (dict "persistence" .Values.primary.persistence "global" .Values.global) | nindent 8 }}
+        {{- if .Values.primary.persistence.selector }}
+        selector: {{- include "common.tplvalues.render" (dict "value" .Values.primary.persistence.selector "context" $) | nindent 10 }}
+        {{- end -}}
+  {{- end }}
+
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/svc.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/svc.yaml
new file mode 100644
index 0000000..9c65c96
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/primary/svc.yaml
@@ -0,0 +1,58 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "mysql.primary.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: primary
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  annotations:
+    {{- if .Values.commonAnnotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.primary.service.annotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.primary.service.annotations "context" $ ) | nindent 4 }}
+    {{- end }}
+spec:
+  type: {{ .Values.primary.service.type }}
+  {{- if and .Values.primary.service.clusterIP (eq .Values.primary.service.type "ClusterIP") }}
+  clusterIP: {{ .Values.primary.service.clusterIP }}
+  {{- end }}
+  {{- if .Values.primary.service.sessionAffinity }}
+  sessionAffinity: {{ .Values.primary.service.sessionAffinity }}
+  {{- end }}
+  {{- if .Values.primary.service.sessionAffinityConfig }}
+  sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.primary.service.sessionAffinityConfig "context" $) | nindent 4 }}
+  {{- end }}
+  {{- if or (eq .Values.primary.service.type "LoadBalancer") (eq .Values.primary.service.type "NodePort") }}
+  externalTrafficPolicy: {{ .Values.primary.service.externalTrafficPolicy | quote }}
+  {{- end }}
+  {{- if and (eq .Values.primary.service.type "LoadBalancer") (not (empty .Values.primary.service.loadBalancerSourceRanges)) }}
+  loadBalancerSourceRanges: {{ .Values.primary.service.loadBalancerSourceRanges }}
+  {{- end }}
+  {{- if and (eq .Values.primary.service.type "LoadBalancer") (not (empty .Values.primary.service.loadBalancerIP)) }}
+  loadBalancerIP: {{ .Values.primary.service.loadBalancerIP }}
+  {{- end }}
+  ports:
+    - name: mysql
+      port: {{ .Values.primary.service.ports.mysql }}
+      protocol: TCP
+      targetPort: mysql
+      {{- if (and (or (eq .Values.primary.service.type "NodePort") (eq .Values.primary.service.type "LoadBalancer")) .Values.primary.service.nodePorts.mysql) }}
+      nodePort: {{ .Values.primary.service.nodePorts.mysql }}
+      {{- else if eq .Values.primary.service.type "ClusterIP" }}
+      nodePort: null
+      {{- end }}
+    {{- if .Values.primary.service.extraPorts }}
+    {{- include "common.tplvalues.render" (dict "value" .Values.primary.service.extraPorts "context" $) | nindent 4 }}
+    {{- end }}
+    
+  selector: {{ include "common.labels.matchLabels" . | nindent 4 }}
+    app.kubernetes.io/component: primary
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/prometheusrule.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/prometheusrule.yaml
new file mode 100644
index 0000000..48daeab
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/prometheusrule.yaml
@@ -0,0 +1,27 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.metrics.enabled .Values.metrics.prometheusRule.enabled }}
+apiVersion: monitoring.coreos.com/v1
+kind: PrometheusRule
+metadata:
+  name: {{ include "common.names.fullname" . }}
+  namespace: {{ default .Release.Namespace .Values.metrics.prometheusRule.namespace }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: metrics
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.metrics.prometheusRule.additionalLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.prometheusRule.additionalLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+spec:
+  groups:
+  - name: {{ include "common.names.fullname" . }}
+    rules: {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.prometheusRule.rules "context" $ ) | nindent 6 }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/role.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/role.yaml
new file mode 100644
index 0000000..d428567
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/role.yaml
@@ -0,0 +1,29 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.serviceAccount.create  .Values.rbac.create }}
+apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }}
+kind: Role
+metadata:
+  name: {{ include "common.names.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+rules:
+  - apiGroups:
+      - ""
+    resources:
+      - endpoints
+    verbs:
+      - get
+  {{- if .Values.rbac.rules }}
+  {{- include "common.tplvalues.render" ( dict "value" .Values.rbac.rules "context" $ ) | nindent 2 }}
+  {{- end }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/rolebinding.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/rolebinding.yaml
new file mode 100644
index 0000000..125ae6f
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/rolebinding.yaml
@@ -0,0 +1,26 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.serviceAccount.create .Values.rbac.create }}
+kind: RoleBinding
+apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }}
+metadata:
+  name: {{ include "common.names.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+subjects:
+  - kind: ServiceAccount
+    name: {{ include "mysql.serviceAccountName" . }}
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: {{ include "common.names.fullname" . -}}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/secrets.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/secrets.yaml
new file mode 100644
index 0000000..ce6c0fd
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/secrets.yaml
@@ -0,0 +1,80 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- $host := include "mysql.primary.fullname" . }}
+{{- $port := .Values.primary.service.ports.mysql | toString }}
+{{- $rootPassword := include "common.secrets.passwords.manage" (dict "secret" (include "mysql.secretName" .) "key" "mysql-root-password" "length" 10 "providedValues" (list "auth.rootPassword") "context" $) | trimAll "\"" | b64dec }}
+{{- $password := include "common.secrets.passwords.manage" (dict "secret" (include "mysql.secretName" .) "key" "mysql-password" "length" 10 "providedValues" (list "auth.password") "context" $) | trimAll "\"" | b64dec }}
+{{- if eq (include "mysql.createSecret" .) "true" }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ include "common.names.fullname" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: Opaque
+data:
+  mysql-root-password: {{ print $rootPassword | b64enc | quote }}
+  mysql-password: {{ print $password | b64enc | quote }}
+{{- end }}
+{{- if .Values.serviceBindings.enabled }}
+---
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ include "common.names.fullname" . }}-svcbind-root
+  namespace: {{ .Release.Namespace | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: servicebinding.io/mysql
+data:
+  provider: {{ print "drycc" | b64enc | quote }}
+  type: {{ print "mysql" | b64enc | quote }}
+  host: {{ print $host | b64enc | quote }}
+  port: {{ print $port | b64enc | quote }}
+  username: {{ print "root" | b64enc | quote }}
+  password: {{ print $rootPassword | b64enc | quote }}
+  uri: {{ printf "mysql://root:%s@%s:%s" $rootPassword $host $port | b64enc | quote }}
+
+{{- if .Values.auth.username }}
+{{- $database := .Values.auth.database  }}
+---
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ include "common.names.fullname" . }}-svcbind-administrator-user
+  namespace: {{ .Release.Namespace | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+type: servicebinding.io/mysql
+data:
+  provider: {{ print "drycc" | b64enc | quote }}
+  type: {{ print "mysql" | b64enc | quote }}
+  host: {{ print $host | b64enc | quote }}
+  port: {{ print $port | b64enc | quote }}
+  username: {{ print .Values.auth.username | b64enc | quote }}
+  {{- if $database }}
+  database: {{ print $database | b64enc | quote }}
+  {{- end }}
+  password: {{ print $password | b64enc | quote }}
+  uri: {{ printf "mysql://%s:%s@%s:%s/%s" .Values.auth.username $password $host $port $database | b64enc | quote }}
+{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/serviceaccount.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/serviceaccount.yaml
new file mode 100644
index 0000000..a1d8721
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/serviceaccount.yaml
@@ -0,0 +1,28 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.serviceAccount.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ include "mysql.serviceAccountName" . }}
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  annotations:
+    {{- if .Values.commonAnnotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.serviceAccount.annotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.serviceAccount.annotations "context" $ ) | nindent 4 }}
+    {{- end }}
+automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
+{{- if (not .Values.auth.customPasswordFiles) }}
+secrets:
+  - name: {{ template "mysql.secretName" . }}
+{{- end }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/templates/servicemonitor.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/templates/servicemonitor.yaml
new file mode 100644
index 0000000..b997bf5
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/templates/servicemonitor.yaml
@@ -0,0 +1,54 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+  name: {{ include "common.names.fullname" . }}
+  namespace: {{ default (include "common.names.namespace" .) .Values.metrics.serviceMonitor.namespace }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    {{- if .Values.metrics.serviceMonitor.labels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.serviceMonitor.labels "context" $ ) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  annotations:
+    {{- if .Values.commonAnnotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+    {{- end }}
+    {{- if .Values.metrics.serviceMonitor.annotations }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.serviceMonitor.annotations "context" $ ) | nindent 4 }}
+    {{- end }}
+spec:
+  jobLabel: {{ .Values.metrics.serviceMonitor.jobLabel | quote }}
+  endpoints:
+    - port: metrics
+      {{- if .Values.metrics.serviceMonitor.interval }}
+      interval: {{ .Values.metrics.serviceMonitor.interval }}
+      {{- end }}
+      {{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
+      scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
+      {{- end }}
+      {{- if .Values.metrics.serviceMonitor.honorLabels }}
+      honorLabels: {{ .Values.metrics.serviceMonitor.honorLabels }}
+      {{- end }}
+      {{- if .Values.metrics.serviceMonitor.metricRelabelings }}
+      metricRelabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.serviceMonitor.metricRelabelings "context" $) | nindent 8 }}
+      {{- end }}
+      {{- if .Values.metrics.serviceMonitor.relabelings }}
+      relabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.serviceMonitor.relabelings "context" $) | nindent 8 }}
+      {{- end }}
+  namespaceSelector:
+    matchNames:
+      - {{ include "common.names.namespace" . | quote }}
+  selector:
+    matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
+      app.kubernetes.io/component: metrics
+      {{- if .Values.metrics.serviceMonitor.selector }}
+      {{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 6 }}
+      {{- end }}
+{{- end }}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/values.schema.json b/addons/mysql-basic/8.0/chart/mysql-basic/values.schema.json
new file mode 100644
index 0000000..f81d531
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/values.schema.json
@@ -0,0 +1,195 @@
+{
+  "$schema": "http://json-schema.org/schema#",
+  "type": "object",
+  "properties": {
+    "architecture": {
+      "type": "string",
+      "title": "MySQL architecture",
+      "form": true,
+      "description": "Allowed values: `standalone` `mgr` or `replication`",
+      "enum": ["standalone", "replication", "mgr"]
+    },
+    "auth": {
+      "type": "object",
+      "title": "Authentication configuration",
+      "form": true,
+      "required": ["username", "password"],
+      "if": {
+        "properties": {
+          "createDatabase":  { "enum": [ true ] }
+        }
+      },
+      "then": {
+        "properties": {
+          "database": {
+            "pattern": "[a-zA-Z0-9]{1,64}"
+          }
+        }
+      },
+      "properties": {
+        "rootPassword": {
+          "type": "string",
+          "title": "MySQL root password",
+          "description": "Defaults to a random 10-character alphanumeric string if not set"
+        },
+        "database": {
+          "type": "string",
+          "title": "MySQL custom database name",
+          "maxLength": 64
+        },
+        "username": {
+          "type": "string",
+          "title": "MySQL custom username"
+        },
+        "password": {
+          "type": "string",
+          "title": "MySQL custom password"
+        },
+        "replicationUser": {
+          "type": "string",
+          "title": "MySQL replication username"
+        },
+        "replicationPassword": {
+          "type": "string",
+          "title": "MySQL replication password"
+        },
+        "createDatabase": {
+          "type": "boolean",
+          "title": "MySQL create custom database"
+        }
+      }
+    },
+    "primary": {
+      "type": "object",
+      "title": "Primary database configuration",
+      "form": true,
+      "properties": {
+        "podSecurityContext": {
+          "type": "object",
+          "title": "MySQL primary Pod security context",
+          "properties": {
+            "enabled": {
+              "type": "boolean",
+              "default": false
+            },
+            "fsGroup": {
+              "type": "integer",
+              "default": 1001,
+              "hidden": {
+                "value": false,
+                "path": "primary/podSecurityContext/enabled"
+              }
+            }
+          }
+        },
+        "containerSecurityContext": {
+          "type": "object",
+          "title": "MySQL primary container security context",
+          "properties": {
+            "enabled": {
+              "type": "boolean",
+              "default": false
+            },
+            "runAsUser": {
+              "type": "integer",
+              "default": 1001,
+              "hidden": {
+                "value": false,
+                "path": "primary/containerSecurityContext/enabled"
+              }
+            }
+          }
+        },
+        "persistence": {
+          "type": "object",
+          "title": "Enable persistence using Persistent Volume Claims",
+          "properties": {
+            "enabled": {
+              "type": "boolean",
+              "default": true,
+              "title": "If true, use a Persistent Volume Claim, If false, use emptyDir"
+            },
+            "size": {
+              "type": "string",
+              "title": "Persistent Volume Size",
+              "form": true,
+              "render": "slider",
+              "sliderMin": 1,
+              "sliderUnit": "Gi",
+              "hidden": {
+                "value": false,
+                "path": "primary/persistence/enabled"
+              }
+            }
+          }
+        }
+      }
+    },
+    "secondary": {
+      "type": "object",
+      "title": "Secondary database configuration",
+      "form": true,
+      "properties": {
+        "podSecurityContext": {
+          "type": "object",
+          "title": "MySQL secondary Pod security context",
+          "properties": {
+            "enabled": {
+              "type": "boolean",
+              "default": false
+            },
+            "fsGroup": {
+              "type": "integer",
+              "default": 1001,
+              "hidden": {
+                "value": false,
+                "path": "secondary/podSecurityContext/enabled"
+              }
+            }
+          }
+        },
+        "containerSecurityContext": {
+          "type": "object",
+          "title": "MySQL secondary container security context",
+          "properties": {
+            "enabled": {
+              "type": "boolean",
+              "default": false
+            },
+            "runAsUser": {
+              "type": "integer",
+              "default": 1001,
+              "hidden": {
+                "value": false,
+                "path": "secondary/containerSecurityContext/enabled"
+              }
+            }
+          }
+        },
+        "persistence": {
+          "type": "object",
+          "title": "Enable persistence using Persistent Volume Claims",
+          "properties": {
+            "enabled": {
+              "type": "boolean",
+              "default": true,
+              "title": "If true, use a Persistent Volume Claim, If false, use emptyDir"
+            },
+            "size": {
+              "type": "string",
+              "title": "Persistent Volume Size",
+              "form": true,
+              "render": "slider",
+              "sliderMin": 1,
+              "sliderUnit": "Gi",
+              "hidden": {
+                "value": false,
+                "path": "secondary/persistence/enabled"
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/addons/mysql-basic/8.0/chart/mysql-basic/values.yaml b/addons/mysql-basic/8.0/chart/mysql-basic/values.yaml
new file mode 100644
index 0000000..681faaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/chart/mysql-basic/values.yaml
@@ -0,0 +1,910 @@
+## @section Global parameters
+## Global Docker image parameters
+## Please, note that this will override the image parameters, including dependencies, configured to use the global value
+## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass
+
+## @param global.imageRegistry Global Docker image registry
+## @param global.imagePullSecrets Global Docker registry secret names as an array
+## @param global.storageClass Global StorageClass for Persistent Volume(s)
+##
+global:
+  imageRegistry: ""
+  ## E.g.
+  ## imagePullSecrets:
+  ##   - myRegistryKeySecretName
+  ##
+  imagePullSecrets: []
+  storageClass: ""
+
+## @section Common parameters
+
+## @param kubeVersion Force target Kubernetes version (using Helm capabilities if not set)
+##
+kubeVersion: ""
+## @param nameOverride String to partially override common.names.fullname template (will maintain the release name)
+##
+nameOverride: ""
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: ""
+## @param namespaceOverride String to fully override common.names.namespace
+##
+namespaceOverride: ""
+## @param clusterDomain Cluster domain
+##
+clusterDomain: cluster.local
+## @param commonAnnotations Common annotations to add to all MySQL resources (sub-charts are not considered). Evaluated as a template
+##
+commonAnnotations: {}
+## @param commonLabels Common labels to add to all MySQL resources (sub-charts are not considered). Evaluated as a template
+##
+commonLabels: {}
+## @param extraDeploy Array with extra yaml to deploy with the chart. Evaluated as a template
+##
+extraDeploy: []
+
+## @param serviceBindings.enabled Create secret for service binding (Experimental)
+## Ref: https://servicebinding.io/service-provider/
+##
+serviceBindings:
+  enabled: true
+## Enable diagnostic mode in the deployment
+##
+diagnosticMode:
+  ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden)
+  ##
+  enabled: false
+  ## @param diagnosticMode.command Command to override all containers in the deployment
+  ##
+  command:
+    - sleep
+  ## @param diagnosticMode.args Args to override all containers in the deployment
+  ##
+  args:
+    - infinity
+
+## @section MySQL common parameters
+
+## Drycc MySQL image
+## ref: https://hub.docker.com/r/drycc/mysql/tags/
+## @param image.registry MySQL image registry
+## @param image.repository MySQL image repository
+## @param image.tag MySQL image tag (immutable tags are recommended)
+## @param image.digest MySQL image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
+## @param image.pullPolicy MySQL image pull policy
+## @param image.pullSecrets Specify docker-registry secret names as an array
+## @param image.debug Specify if debug logs should be enabled
+##
+image:
+  registry: registry.drycc.cc
+  repository: drycc-addons/mysql
+  tag: "8.0"
+  digest: ""
+  ## Specify a imagePullPolicy
+  ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
+  ## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images
+  ##
+  pullPolicy: IfNotPresent
+  ## Optionally specify an array of imagePullSecrets (secrets must be manually created in the namespace)
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+  ## Example:
+  ## pullSecrets:
+  ##   - myRegistryKeySecretName
+  ##
+  pullSecrets: []
+  ## Set to true if you would like to see extra information on logs
+  ## It turns BASH and/or NAMI debugging in the image
+  ##
+  debug: false
+## @param architecture MySQL architecture (`standalone` `mgr` or `replication`)
+##
+architecture: standalone
+## MySQL Authentication parameters
+##
+auth:
+  ## @param auth.rootPassword Password for the `root` user. Ignored if existing secret is provided
+  ## ref: https://github.com/drycc/containers/tree/main/drycc/mysql#setting-the-root-password-on-first-run
+  ##
+  rootPassword: ""
+  ## @param auth.createDatabase Wheter to create the .Values.auth.database or not
+  ## ref: https://github.com/drycc/containers/tree/main/drycc/mysql#creating-a-database-on-first-run
+  ##
+  createDatabase: true
+  ## @param auth.database Name for a custom database to create
+  ## ref: https://github.com/drycc/containers/tree/main/drycc/mysql#creating-a-database-on-first-run
+  ##
+  database: "mondb"
+  ## @param auth.username Name for a custom user to create
+  ## ref: https://github.com/drycc/containers/tree/main/drycc/mysql#creating-a-database-user-on-first-run
+  ##
+  username: "administrator"
+  ## @param auth.password Password for the new user. Ignored if existing secret is provided
+  ##
+  password: ""
+  ## @param auth.replicationUser MySQL replication user
+  ## ref: https://github.com/drycc/containers/tree/main/drycc/mysql#setting-up-a-replication-cluster
+  ##
+  replicationUser: replicator
+  ## @param auth.replicationPassword MySQL replication user password. Ignored if existing secret is provided
+  ##
+  replicationPassword: ""
+  ## @param auth.existingSecret Use existing secret for password details. The secret has to contain the keys `mysql-root-password`, `mysql-replication-password` and `mysql-password`
+  ## NOTE: When it's set the auth.rootPassword, auth.password, auth.replicationPassword are ignored.
+  ##
+  existingSecret: ""
+  ## @param auth.usePasswordFiles Mount credentials as files instead of using an environment variable
+  ##
+  usePasswordFiles: false
+  ## @param auth.customPasswordFiles Use custom password files when `auth.usePasswordFiles` is set to `true`. Define path for keys `root` and `user`, also define `replicator` if `architecture` is set to `replication`
+  ## Example:
+  ## customPasswordFiles:
+  ##   root: /vault/secrets/mysql-root
+  ##   user: /vault/secrets/mysql-user
+  ##   replicator: /vault/secrets/mysql-replicator
+  ##
+  customPasswordFiles: {}
+## @param initdbScripts Dictionary of initdb scripts
+## Specify dictionary of scripts to be run at first boot
+## Example:
+## initdbScripts:
+##   my_init_script.sh: |
+##      #!/bin/bash
+##      echo "Do something."
+##
+initdbScripts:
+  init-mysql.sh: |
+    #!/bin/bash
+     export HOST=${MYSQL_HOST:-localhost}
+     mysql -u"${MYSQL_ROOT_USER}" -p"${MYSQL_ROOT_PASSWORD}" \
+     -h"${HOST}" -P"${MYSQL_PORT_NUMBER:-3306}" \
+     -e "GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"
+
+## @param initdbScriptsConfigMap ConfigMap with the initdb scripts (Note: Overrides `initdbScripts`)
+##
+initdbScriptsConfigMap: ""
+
+## @section MySQL Primary parameters
+
+primary:
+  ## @param primary.name Name of the primary database (eg primary, master, leader, ...)
+  ##
+  name: primary
+  ## @param primary.replicaCount Number of MySQL primary instances
+  ##
+  replicaCount: 1
+  ## @param primary.command Override default container command on MySQL Primary container(s) (useful when using custom images)
+  ##
+  command: []
+  ## @param primary.args Override default container args on MySQL Primary container(s) (useful when using custom images)
+  ##
+  args: []
+  ## @param primary.lifecycleHooks for the MySQL Primary container(s) to automate configuration before or after startup
+  ##configuration
+  lifecycleHooks: {}
+  ## @param primary.hostAliases Deployment pod host aliases
+  ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
+  ##
+  hostAliases: []
+  ## @param primary.configuration [string] Configure MySQL Primary with a custom my.cnf file
+  ## ref: https://mysql.com/kb/en/mysql/configuring-mysql-with-mycnf/#example-of-configuration-file
+  ##
+  maxConnectionLimit: 2000
+  ## against plans
+  extraConfig: |
+    [mysqld]
+    innodb_io_capacity=2000
+    innodb_io_capacity_max=3000
+    max_connect_errors=1000000
+    thread_cache_size=200
+
+  configuration: |-
+    [mysqld]
+    # server
+    default_authentication_plugin=caching_sha2_password
+    skip-name-resolve
+    relay-log=relay-log
+    relay-log-index=relay-log.index
+    log-bin=mysql-bin
+    explicit_defaults_for_timestamp
+    basedir=/opt/drycc/mysql
+    plugin_dir=/opt/drycc/mysql/lib/plugin
+    port=3306
+    socket=/opt/drycc/mysql/tmp/mysql.sock
+    datadir=/drycc/mysql/data
+    tmpdir=/opt/drycc/mysql/tmp
+    max_allowed_packet=16M
+    bind-address=*
+    pid-file=/opt/drycc/mysql/tmp/mysqld.pid
+    log-error=/opt/drycc/mysql/logs/mysqld.log
+    character-set-server=UTF8MB4
+    collation-server=UTF8MB4_general_ci
+    slow_query_log=0
+    long_query_time=10.0
+    log_timestamps=system
+    disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
+    sql_require_primary_key=ON
+    log_error_suppression_list='MY-013360'
+    binlog_transaction_dependency_tracking=WRITESET
+    default-time-zone='+8:00'
+    local_infile=ON
+    binlog_expire_logs_seconds=86400
+    # Replication
+
+    log_bin=mysql-bin
+    gtid_mode=ON
+    enforce_gtid_consistency=ON
+    log_replica_updates=ON 
+    #master_info_repository=TABLE 
+    #relay_log_info_repository=TABLE 
+    #super_read_only=ON 
+    #binlog_transaction_dependency_tarcking=WRITEST 
+    #transaction_write_set_extraction=XXHASH64
+
+    # Multi-threaded Replication
+    replica_preserve_commit_order=ON 
+    replica_parallel_workers=8
+
+    # Group Replication Settings 
+
+    [client]
+    port=3306
+    socket=/opt/drycc/mysql/tmp/mysql.sock
+    default-character-set=UTF8MB4
+    plugin_dir=/opt/drycc/mysql/lib/plugin
+
+    [manager]
+    port=3306
+    socket=/opt/drycc/mysql/tmp/mysql.sock
+    pid-file=/opt/drycc/mysql/tmp/mysqld.pid
+
+    !includedir /drycc/mysql/
+
+  ## @param primary.existingConfigmap Name of existing ConfigMap with MySQL Primary configuration.
+  ## NOTE: When it's set the 'configuration' parameter is ignored
+  ##
+  existingConfigmap: ""
+  ## @param primary.updateStrategy.type Update strategy type for the MySQL primary statefulset
+  ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
+  ##
+  updateStrategy:
+    type: RollingUpdate
+  ## @param primary.podAnnotations Additional pod annotations for MySQL primary pods
+  ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+  ##
+  podAnnotations: {}
+  ## @param primary.podAffinityPreset MySQL primary pod affinity preset. Ignored if `primary.affinity` is set. Allowed values: `soft` or `hard`
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
+  ##
+  podAffinityPreset: ""
+  ## @param primary.podAntiAffinityPreset MySQL primary pod anti-affinity preset. Ignored if `primary.affinity` is set. Allowed values: `soft` or `hard`
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
+  ##
+  podAntiAffinityPreset: soft
+  ## MySQL Primary node affinity preset
+  ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
+  ##
+  nodeAffinityPreset:
+    ## @param primary.nodeAffinityPreset.type MySQL primary node affinity preset type. Ignored if `primary.affinity` is set. Allowed values: `soft` or `hard`
+    ##
+    type: ""
+    ## @param primary.nodeAffinityPreset.key MySQL primary node label key to match Ignored if `primary.affinity` is set.
+    ## E.g.
+    ## key: "kubernetes.io/e2e-az-name"
+    ##
+    key: ""
+    ## @param primary.nodeAffinityPreset.values MySQL primary node label values to match. Ignored if `primary.affinity` is set.
+    ## E.g.
+    ## values:
+    ##   - e2e-az1
+    ##   - e2e-az2
+    ##
+    values: []
+  ## @param primary.affinity Affinity for MySQL primary pods assignment
+  ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+  ## Note: podAffinityPreset, podAntiAffinityPreset, and  nodeAffinityPreset will be ignored when it's set
+  ##
+  affinity: {}
+  ## @param primary.nodeSelector Node labels for MySQL primary pods assignment
+  ## ref: https://kubernetes.io/docs/user-guide/node-selection/
+  ##
+  nodeSelector: {}
+  ## @param primary.tolerations Tolerations for MySQL primary pods assignment
+  ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+  ##
+  tolerations: []
+  ## @param primary.priorityClassName MySQL primary pods' priorityClassName
+  ##
+  priorityClassName: ""
+  ## @param primary.schedulerName Name of the k8s scheduler (other than default)
+  ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
+  ##
+  schedulerName: ""
+  ## @param primary.terminationGracePeriodSeconds In seconds, time the given to the MySQL primary pod needs to terminate gracefully
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
+  ##
+  terminationGracePeriodSeconds: ""
+  ## @param primary.topologySpreadConstraints Topology Spread Constraints for pod assignment
+  ## https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
+  ## The value is evaluated as a template
+  ##
+  topologySpreadConstraints: []
+  ## @param primary.podManagementPolicy podManagementPolicy to manage scaling operation of MySQL primary pods
+  ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
+  ##
+  podManagementPolicy: "OrderedReady"
+  ## MySQL primary Pod security context
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
+  ## @param primary.podSecurityContext.enabled Enable security context for MySQL primary pods
+  ## @param primary.podSecurityContext.fsGroup Group ID for the mounted volumes' filesystem
+  ##
+  podSecurityContext:
+    enabled: true
+    fsGroup: 1001
+  ## MySQL primary container security context
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
+  ## @param primary.containerSecurityContext.enabled MySQL primary container securityContext
+  ## @param primary.containerSecurityContext.runAsUser User ID for the MySQL primary container
+  ## @param primary.containerSecurityContext.runAsNonRoot Set MySQL primary container's Security Context runAsNonRoot
+  ##
+  containerSecurityContext:
+    enabled: true
+    runAsUser: 1001
+    runAsNonRoot: true
+  ## MySQL primary container's resource requests and limits
+  ## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+  ## We usually recommend not to specify default resources and to leave this as a conscious
+  ## choice for the user. This also increases chances charts run on environments with little
+  ## resources, such as Minikube. If you do want to specify resources, uncomment the following
+  ## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  ## @param primary.resources.limits The resources limits for MySQL primary containers
+  ## @param primary.resources.requests The requested resources for MySQL primary containers
+  ##
+  resources:
+    ## Example:
+    ## limits:
+    ##    cpu: 250m
+    ##    memory: 256Mi
+    limits: {}
+    ## Examples:
+    ## requests:
+    ##    cpu: 250m
+    ##    memory: 256Mi
+    requests: {}
+  ## Configure extra options for liveness probe
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
+  ## @param primary.livenessProbe.enabled Enable livenessProbe
+  ## @param primary.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
+  ## @param primary.livenessProbe.periodSeconds Period seconds for livenessProbe
+  ## @param primary.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
+  ## @param primary.livenessProbe.failureThreshold Failure threshold for livenessProbe
+  ## @param primary.livenessProbe.successThreshold Success threshold for livenessProbe
+  ##
+  livenessProbe:
+    enabled: true
+    initialDelaySeconds: 5
+    periodSeconds: 10
+    timeoutSeconds: 10
+    failureThreshold: 3
+    successThreshold: 1
+  ## Configure extra options for readiness probe
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
+  ## @param primary.readinessProbe.enabled Enable readinessProbe
+  ## @param primary.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
+  ## @param primary.readinessProbe.periodSeconds Period seconds for readinessProbe
+  ## @param primary.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
+  ## @param primary.readinessProbe.failureThreshold Failure threshold for readinessProbe
+  ## @param primary.readinessProbe.successThreshold Success threshold for readinessProbe
+  ##
+  readinessProbe:
+    enabled: true
+    initialDelaySeconds: 5
+    periodSeconds: 10
+    timeoutSeconds: 10
+    failureThreshold: 3
+    successThreshold: 1
+  ## Configure extra options for startupProbe probe
+  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
+  ## @param primary.startupProbe.enabled Enable startupProbe
+  ## @param primary.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe
+  ## @param primary.startupProbe.periodSeconds Period seconds for startupProbe
+  ## @param primary.startupProbe.timeoutSeconds Timeout seconds for startupProbe
+  ## @param primary.startupProbe.failureThreshold Failure threshold for startupProbe
+  ## @param primary.startupProbe.successThreshold Success threshold for startupProbe
+  ##
+  startupProbe:
+    enabled: true
+    initialDelaySeconds: 15
+    periodSeconds: 10
+    timeoutSeconds: 10
+    failureThreshold: 10
+    successThreshold: 1
+  ## @param primary.customLivenessProbe Override default liveness probe for MySQL primary containers
+  ##
+  customLivenessProbe: {}
+  ## @param primary.customReadinessProbe Override default readiness probe for MySQL primary containers
+  ##
+  customReadinessProbe: {}
+  ## @param primary.customStartupProbe Override default startup probe for MySQL primary containers
+  ##
+  customStartupProbe: {}
+  ## @param primary.extraFlags MySQL primary additional command line flags
+  ## Can be used to specify command line flags, for example:
+  ## E.g.
+  ## extraFlags: "--max-connect-errors=1000 --max_connections=155"
+  ##
+  extraFlags: ""
+  ## @param primary.extraEnvVars Extra environment variables to be set on MySQL primary containers
+  ## E.g.
+  ## extraEnvVars:
+  ##  - name: TZ
+  ##    value: "Europe/Paris"
+  ##
+  extraEnvVars: []
+  ## @param primary.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for MySQL primary containers
+  ##
+  extraEnvVarsCM: ""
+  ## @param primary.extraEnvVarsSecret Name of existing Secret containing extra env vars for MySQL primary containers
+  ##
+  extraEnvVarsSecret: ""
+  ## Enable persistence using Persistent Volume Claims
+  ## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+  ##
+  persistentVolumeClaimRetentionPolicy:
+    enabled: true
+    whenScaled: Retain
+    whenDeleted: Delete
+  persistence:
+    ## @param primary.persistence.enabled Enable persistence on MySQL primary replicas using a `PersistentVolumeClaim`. If false, use emptyDir
+    ##
+    enabled: true
+    ## @param primary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL primary replicas
+    ## NOTE: When it's set the rest of persistence parameters are ignored
+    ##
+    existingClaim: ""
+    ## @param primary.persistence.storageClass MySQL primary persistent volume storage Class
+    ## If defined, storageClassName: <storageClass>
+    ## If set to "-", storageClassName: "", which disables dynamic provisioning
+    ## If undefined (the default) or set to null, no storageClassName spec is
+    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+    ##   GKE, AWS & OpenStack)
+    ##
+    storageClass: ""
+    ## @param primary.persistence.annotations MySQL primary persistent volume claim annotations
+    ##
+    annotations: {}
+    ## @param primary.persistence.accessModes MySQL primary persistent volume access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param primary.persistence.size MySQL primary persistent volume size
+    ##
+    size: 8Gi
+    ## @param primary.persistence.selector Selector to match an existing Persistent Volume
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+  ## @param primary.extraVolumes Optionally specify extra list of additional volumes to the MySQL Primary pod(s)
+  ##
+  extraVolumes: []
+  ## @param primary.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the MySQL Primary container(s)
+  ##
+  extraVolumeMounts: []
+  ## @param primary.initContainers Add additional init containers for the MySQL Primary pod(s)
+  ##
+  initContainers: []
+  ## @param primary.sidecars Add additional sidecar containers for the MySQL Primary pod(s)
+  ##
+  sidecars: []
+  ## MySQL Primary Service parameters
+  ##
+  service:
+    ## @param primary.service.type MySQL Primary K8s service type
+    ##
+    type: ClusterIP
+    ## @param primary.service.ports.mysql MySQL Primary K8s service port
+    ##
+    ports:
+      mysql: 3306
+    ## @param primary.service.nodePorts.mysql MySQL Primary K8s service node port
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
+    ##
+    nodePorts:
+      mysql: ""
+    ## @param primary.service.clusterIP MySQL Primary K8s service clusterIP IP
+    ## e.g:
+    ## clusterIP: None
+    ##
+    clusterIP: ""
+    ## @param primary.service.loadBalancerIP MySQL Primary loadBalancerIP if service type is `LoadBalancer`
+    ## Set the LoadBalancer service type to internal only
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer
+    ##
+    loadBalancerIP: ""
+    ## @param primary.service.externalTrafficPolicy Enable client source IP preservation
+    ## ref https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
+    ##
+    externalTrafficPolicy: Cluster
+    ## @param primary.service.loadBalancerSourceRanges Addresses that are allowed when MySQL Primary service is LoadBalancer
+    ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+    ## E.g.
+    ## loadBalancerSourceRanges:
+    ##   - 10.10.10.0/24
+    ##
+    loadBalancerSourceRanges: []
+    ## @param primary.service.extraPorts Extra ports to expose (normally used with the `sidecar` value)
+    ##
+    extraPorts: []
+    ## @param primary.service.annotations Additional custom annotations for MySQL primary service
+    ##
+    annotations: {}
+    ## @param primary.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP"
+    ## If "ClientIP", consecutive client requests will be directed to the same Pod
+    ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
+    ##
+    sessionAffinity: None
+    ## @param primary.service.sessionAffinityConfig Additional settings for the sessionAffinity
+    ## sessionAffinityConfig:
+    ##   clientIP:
+    ##     timeoutSeconds: 300
+    ##
+    sessionAffinityConfig: {}
+    headless:
+      ## @param secondary.service.headless.annotations Additional custom annotations for headless MySQL secondary service.
+      ##
+      annotations: {}
+  ## MySQL primary Pod Disruption Budget configuration
+  ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
+  ##
+  pdb:
+    ## @param primary.pdb.create Enable/disable a Pod Disruption Budget creation for MySQL primary pods
+    ##
+    create: false
+    ## @param primary.pdb.minAvailable Minimum number/percentage of MySQL primary pods that should remain scheduled
+    ##
+    minAvailable: 1
+    ## @param primary.pdb.maxUnavailable Maximum number/percentage of MySQL primary pods that may be made unavailable
+    ##
+    maxUnavailable: ""
+  ## @param primary.podLabels MySQL Primary pod label. If labels are same as commonLabels , this will take precedence
+  ##
+  podLabels: {}
+
+cluster:
+  ## @param router.name Name of the cluster
+  ##
+  name: cluster
+
+  image:
+    registry: registry.drycc.cc
+    repository: drycc-addons/mysql-shell
+    tag: "8.0"
+    digest: ""
+    pullPolicy: IfNotPresent
+
+## MySQL pods ServiceAccount
+## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
+##
+serviceAccount:
+  ## @param serviceAccount.create Enable the creation of a ServiceAccount for MySQL pods
+  ##
+  create: true
+  ## @param serviceAccount.name Name of the created ServiceAccount
+  ## If not set and create is true, a name is generated using the mysql.fullname template
+  ##
+  name: ""
+  ## @param serviceAccount.annotations Annotations for MySQL Service Account
+  ##
+  annotations: {}
+  ## @param serviceAccount.automountServiceAccountToken Automount service account token for the server service account
+  ##
+  automountServiceAccountToken: true
+
+## Role Based Access
+## ref: https://kubernetes.io/docs/admin/authorization/rbac/
+##
+rbac:
+  ## @param rbac.create Whether to create & use RBAC resources or not
+  ##
+  create: false
+  ## @param rbac.rules Custom RBAC rules to set
+  ## e.g:
+  ## rules:
+  ##   - apiGroups:
+  ##       - ""
+  ##     resources:
+  ##       - pods
+  ##     verbs:
+  ##       - get
+  ##       - list
+  ##
+  rules: []
+
+## @section Network Policy
+
+## MySQL Nework Policy configuration
+##
+networkPolicy:
+  ## @param networkPolicy.enabled Enable creation of NetworkPolicy resources
+  ##
+  enabled: true
+  ## @param networkPolicy.allowExternal The Policy model to apply.
+  ## When set to false, only pods with the correct
+  ## client label will have network access to the port MySQL is listening
+  ## on. When true, MySQL will accept connections from any source
+  ## (with the correct destination port).
+  ##
+  allowCurrentNamespace: true
+  allowNamespaces: 
+    - drycc
+    - backup
+
+## @section Volume Permissions parameters
+
+## Init containers parameters:
+## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section.
+##
+volumePermissions:
+  ## @param volumePermissions.enabled Enable init container that changes the owner and group of the persistent volume(s) mountpoint to `runAsUser:fsGroup`
+  ##
+  enabled: false
+  ## @param volumePermissions.image.registry Init container volume-permissions image registry
+  ## @param volumePermissions.image.repository Init container volume-permissions image repository
+  ## @param volumePermissions.image.tag Init container volume-permissions image tag (immutable tags are recommended)
+  ## @param volumePermissions.image.digest Init container volume-permissions image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
+  ## @param volumePermissions.image.pullPolicy Init container volume-permissions image pull policy
+  ## @param volumePermissions.image.pullSecrets Specify docker-registry secret names as an array
+  ##
+  image:
+    registry: registry.drycc.cc
+    repository: drycc/base
+    tag: bookworm
+    digest: ""
+    pullPolicy: IfNotPresent
+    ## Optionally specify an array of imagePullSecrets.
+    ## Secrets must be manually created in the namespace.
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+    ## e.g:
+    ## pullSecrets:
+    ##   - myRegistryKeySecretName
+    ##
+    pullSecrets: []
+  ## @param volumePermissions.resources Init container volume-permissions resources
+  ##
+  resources: {}
+
+## @section Metrics parameters
+
+## Mysqld Prometheus exporter parameters
+##
+metrics:
+  ## @param metrics.enabled Start a side-car prometheus exporter
+  ##
+  enabled: true
+  ## @param metrics.image.registry Exporter image registry
+  ## @param metrics.image.repository Exporter image repository
+  ## @param metrics.image.tag Exporter image tag (immutable tags are recommended)
+  ## @param metrics.image.digest Exporter image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
+  ## @param metrics.image.pullPolicy Exporter image pull policy
+  ## @param metrics.image.pullSecrets Specify docker-registry secret names as an array
+  ##
+  image:
+    registry: registry.drycc.cc
+    repository: drycc-addons/mysqld-exporter
+    tag: 0
+    digest: ""
+    pullPolicy: IfNotPresent
+    ## Optionally specify an array of imagePullSecrets.
+    ## Secrets must be manually created in the namespace.
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+    ## e.g:
+    ## pullSecrets:
+    ##   - myRegistryKeySecretName
+    ##
+    pullSecrets: []
+  ## MySQL Prometheus exporter service parameters
+  ## Mysqld Prometheus exporter liveness and readiness probes
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
+  ## @param metrics.service.type Kubernetes service type for MySQL Prometheus Exporter
+  ## @param metrics.service.port MySQL Prometheus Exporter service port
+  ## @param metrics.service.annotations [object] Prometheus exporter service annotations
+  ##
+  service:
+    type: ClusterIP
+    port: 9104
+    annotations:
+      prometheus.io/scrape: "true"
+      prometheus.io/port: "{{ .Values.metrics.service.port }}"
+  ## @param metrics.extraArgs.primary Extra args to be passed to mysqld_exporter on Primary pods
+  ## @param metrics.extraArgs.secondary Extra args to be passed to mysqld_exporter on Secondary pods
+  ## ref: https://github.com/prometheus/mysqld_exporter/
+  ## E.g.
+  ## - --collect.auto_increment.columns
+  ## - --collect.binlog_size
+  ## - --collect.engine_innodb_status
+  ## - --collect.engine_tokudb_status
+  ## - --collect.global_status
+  ## - --collect.global_variables
+  ## - --collect.info_schema.clientstats
+  ## - --collect.info_schema.innodb_metrics
+  ## - --collect.info_schema.innodb_tablespaces
+  ## - --collect.info_schema.innodb_cmp
+  ## - --collect.info_schema.innodb_cmpmem
+  ## - --collect.info_schema.processlist
+  ## - --collect.info_schema.processlist.min_time
+  ## - --collect.info_schema.query_response_time
+  ## - --collect.info_schema.tables
+  ## - --collect.info_schema.tables.databases
+  ## - --collect.info_schema.tablestats
+  ## - --collect.info_schema.userstats
+  ## - --collect.perf_schema.eventsstatements
+  ## - --collect.perf_schema.eventsstatements.digest_text_limit
+  ## - --collect.perf_schema.eventsstatements.limit
+  ## - --collect.perf_schema.eventsstatements.timelimit
+  ## - --collect.perf_schema.eventswaits
+  ## - --collect.perf_schema.file_events
+  ## - --collect.perf_schema.file_instances
+  ## - --collect.perf_schema.indexiowaits
+  ## - --collect.perf_schema.tableiowaits
+  ## - --collect.perf_schema.tablelocks
+  ## - --collect.perf_schema.replication_group_member_stats
+  ## - --collect.slave_status
+  ## - --collect.slave_hosts
+  ## - --collect.heartbeat
+  ## - --collect.heartbeat.database
+  ## - --collect.heartbeat.table
+  ##
+
+  extraArgs:
+    primary:
+      - --collect.info_schema.processlist
+    secondary: []
+  ## Mysqld Prometheus exporter resource requests and limits
+  ## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+  ## We usually recommend not to specify default resources and to leave this as a conscious
+  ## choice for the user. This also increases chances charts run on environments with little
+  ## resources, such as Minikube. If you do want to specify resources, uncomment the following
+  ## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  ## @param metrics.resources.limits The resources limits for MySQL prometheus exporter containers
+  ## @param metrics.resources.requests The requested resources for MySQL prometheus exporter containers
+  ##
+  resources:
+    ## Example:
+    ## limits:
+    ##    cpu: 100m
+    ##    memory: 256Mi
+    limits:
+      cpu: 100m
+      memory: 256Mi
+    ## Examples:
+    ## requests:
+    ##    cpu: 100m
+    ##    memory: 256Mi
+    requests:
+      cpu: 100m
+      memory: 256Mi
+  containerSecurityContext:
+    enabled: true
+    runAsUser: 1001
+    runAsGroup: 0
+    runAsNonRoot: true
+    allowPrivilegeEscalation: false
+    seccompProfile:
+      type: RuntimeDefault
+    capabilities:
+      drop:
+        - ALL
+  ## Mysqld Prometheus exporter liveness probe
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
+  ## @param metrics.livenessProbe.enabled Enable livenessProbe
+  ## @param metrics.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
+  ## @param metrics.livenessProbe.periodSeconds Period seconds for livenessProbe
+  ## @param metrics.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
+  ## @param metrics.livenessProbe.failureThreshold Failure threshold for livenessProbe
+  ## @param metrics.livenessProbe.successThreshold Success threshold for livenessProbe
+  ##
+  livenessProbe:
+    enabled: false
+    initialDelaySeconds: 120
+    periodSeconds: 10
+    timeoutSeconds: 10
+    successThreshold: 1
+    failureThreshold: 3
+  ## Mysqld Prometheus exporter readiness probe
+  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
+  ## @param metrics.readinessProbe.enabled Enable readinessProbe
+  ## @param metrics.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
+  ## @param metrics.readinessProbe.periodSeconds Period seconds for readinessProbe
+  ## @param metrics.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
+  ## @param metrics.readinessProbe.failureThreshold Failure threshold for readinessProbe
+  ## @param metrics.readinessProbe.successThreshold Success threshold for readinessProbe
+  ##
+  readinessProbe:
+    enabled: false
+    initialDelaySeconds: 30
+    periodSeconds: 10
+    timeoutSeconds: 10
+    successThreshold: 1
+    failureThreshold: 3
+  ## Prometheus Service Monitor
+  ## ref: https://github.com/coreos/prometheus-operator
+  ##
+  serviceMonitor:
+    ## @param metrics.serviceMonitor.enabled Create ServiceMonitor Resource for scraping metrics using PrometheusOperator
+    ##
+    enabled: false
+    ## @param metrics.serviceMonitor.namespace Specify the namespace in which the serviceMonitor resource will be created
+    ##
+    namespace: ""
+    ## @param metrics.serviceMonitor.jobLabel The nadryccme of the label on the target service to use as the job name in prometheus.
+    ##
+    jobLabel: ""
+    ## @param metrics.serviceMonitor.interval Specify the interval at which metrics should be scraped
+    ##
+    interval: 30s
+    ## @param metrics.serviceMonitor.scrapeTimeout Specify the timeout after which the scrape is ended
+    ## e.g:
+    ## scrapeTimeout: 30s
+    ##
+    scrapeTimeout: ""
+    ## @param metrics.serviceMonitor.relabelings RelabelConfigs to apply to samples before scraping
+    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
+    ##
+    relabelings: []
+    ## @param metrics.serviceMonitor.metricRelabelings MetricRelabelConfigs to apply to samples before ingestion
+    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
+    ##
+    metricRelabelings: []
+    ## @param metrics.serviceMonitor.selector ServiceMonitor selector labels
+    ## ref: https://github.com/drycc/charts/tree/master/drycc/prometheus-operator#prometheus-configuration
+    ##
+    ## selector:
+    ##   prometheus: my-prometheus
+    ##
+    selector: {}
+    ## @param metrics.serviceMonitor.honorLabels Specify honorLabels parameter to add the scrape endpoint
+    ##
+    honorLabels: false
+    ## @param metrics.serviceMonitor.labels Used to pass Labels that are used by the Prometheus installed in your cluster to select Service Monitors to work with
+    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec
+    ##
+    labels: {}
+    ## @param metrics.serviceMonitor.annotations ServiceMonitor annotations
+    ##
+    annotations: {}
+
+  ## Prometheus Operator prometheusRule configuration
+  ##
+  prometheusRule:
+    ## @param metrics.prometheusRule.enabled Creates a Prometheus Operator prometheusRule (also requires `metrics.enabled` to be `true` and `metrics.prometheusRule.rules`)
+    ##
+    enabled: false
+    ## @param metrics.prometheusRule.namespace Namespace for the prometheusRule Resource (defaults to the Release Namespace)
+    ##
+    namespace: ""
+    ## @param metrics.prometheusRule.additionalLabels Additional labels that can be used so prometheusRule will be discovered by Prometheus
+    ##
+    additionalLabels: {}
+    ## @param metrics.prometheusRule.rules Prometheus Rule definitions
+    ##  - alert: Mysql-Down
+    ##    expr: absent(up{job="mysql"} == 1)
+    ##    for: 5m
+    ##    labels:
+    ##      severity: warning
+    ##      service: mariadb
+    ##    annotations:
+    ##      message: 'MariaDB instance {{`{{`}} $labels.instance {{`}}`}}  is down'
+    ##      summary: MariaDB instance is down
+    ##
+    rules: []
+
+backup:
+  enabled: false
+  schedule: ""
+  s3:
+    endpoint: ""
+    bucketName: ""
+    accessKey: ""
+    secretKey: ""
+    region: us-west-1
diff --git a/addons/mysql-basic/8.0/job.yaml b/addons/mysql-basic/8.0/job.yaml
new file mode 100644
index 0000000..0494bed
--- /dev/null
+++ b/addons/mysql-basic/8.0/job.yaml
@@ -0,0 +1,72 @@
+{{- /*
+Copyright Drycc Community.
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: {{ include "common.capabilities.cronjob.apiVersion" . }}
+kind: Job
+metadata:
+  name: {{ include "mysql.cluster.fullname" . }}-init
+  namespace: {{ include "common.names.namespace" . | quote }}
+  labels: {{- include "common.labels.standard" . | nindent 4 }}
+    app.kubernetes.io/component: primary
+    {{- if .Values.commonLabels }}
+    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
+    {{- end }}
+  {{- if .Values.commonAnnotations }}
+  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
+  {{- end }}
+
+spec:
+  template:
+    spec:
+      restartPolicy: Never
+      subdomain: {{ include "mysql.primary.fullname" . }}
+      dnsConfig: 
+        searches:
+          - {{ include "mysql.primary.fullname" . }}.{{ include "common.names.namespace" . }}.svc.cluster.local
+      initContainers:
+        - name: init-wait
+          image: registry.drycc.cc/drycc/python-dev:latest
+          imagePullPolicy: {{.Values.image.pullPolicy}}
+          args:
+          - netcat
+          - -v
+          - -u
+          - mysql://$(MYSQL_HOST):$(MYSQL_PORT_NUMBER)
+
+          env:
+            - name: MYSQL_HOST
+              value: {{ include "mysql.primary.fullname" . }}
+            - name: MYSQL_PORT_NUMBER
+              value: {{ .Values.primary.service.ports.mysql | quote }}
+                  
+      containers:         
+        - name: init-mysql
+          image: {{ include "cluster.image" . }}
+          imagePullPolicy: {{ .Values.cluster.image.pullPolicy | quote }}
+          {{- if .Values.primary.containerSecurityContext.enabled }}
+          securityContext: {{- omit .Values.primary.containerSecurityContext "enabled" | toYaml | nindent 12 }}
+          {{- end }}
+          command: 
+            - /bin/bash
+            - -ec
+            - |
+              export HOST=${MYSQL_HOST}
+              # init sql --sql
+              echo "
+              GRANT ALL PRIVILEGES ON *.* TO administrator@'%' WITH GRANT OPTION;flush privileges;
+              " > /tmp/init.sql
+              mysqlsh --uri=${MYSQL_ROOT_USER}@${HOST}:${MYSQL_PORT_NUMBER} -p${MYSQL_ROOT_PASSWORD} --sql -f /tmp/init.sql
+          env:
+            - name: MYSQL_HOST
+              value: {{ include "mysql.primary.fullname" . }}
+            - name: MYSQL_PORT_NUMBER
+              value: {{ .Values.primary.service.ports.mysql | quote }}
+            - name: MYSQL_ROOT_USER
+              value: "root"
+            - name: MYSQL_ROOT_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: {{ template "mysql.secretName" . }}
+                  key: mysql-root-password
diff --git a/addons/mysql-basic/8.0/meta.yaml b/addons/mysql-basic/8.0/meta.yaml
new file mode 100644
index 0000000..5104664
--- /dev/null
+++ b/addons/mysql-basic/8.0/meta.yaml
@@ -0,0 +1,30 @@
+name: mysql-basic
+version: 8.0
+id: 8da0ded8-4b4f-11f1-aaed-b363117f2edf
+description: "mysql-basic"
+displayName: "mysql-basic"
+metadata:
+  displayName: "mysql-basic"
+  provider:
+    name: drycc
+    supportURL: https://mysql.io
+  documentationURL: https://github.com/drycc-addons/drycc-docker-mysql
+tags: mysql
+bindable: true
+instances_retrievable: true
+bindings_retrievable: true
+plan_updateable: true
+allow_parameters:
+- name: "networkPolicy.allowNamespaces"
+  required: false
+  description: "networkPolicy allowNamespaces config for values.yaml"
+- name: "primary.service.type"
+  required: false
+  description: "service type config for values.yaml"
+- name: "backup"
+  required: false
+  description: "backup config for values.yaml"
+- name: "primary.nodeSelector"
+  required: false
+  description: "primary.nodeSelector for values.yaml"
+archive: false
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-16c64g400/bind.yaml b/addons/mysql-basic/8.0/plans/standard-16c64g400/bind.yaml
new file mode 100644
index 0000000..a066838
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-16c64g400/bind.yaml
@@ -0,0 +1,35 @@
+credential:
+{{- if (eq .Values.router.service.type "LoadBalancer") }}
+  - name: EXTRANET_HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .status.loadBalancer.ingress[*].ip }'
+{{- end }}
+  - name: DOMAIN
+    value: {{ template "common.names.fullname" . }}-router.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}
+  - name: HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .spec.clusterIP }'
+  - name: PASSWORD
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.password }' 
+  - name: USERNAME
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.username }' 
+  - name: READONLY_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portro }'
+  - name: READWRITE_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portrw }' 
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-16c64g400/instance-schema.json b/addons/mysql-basic/8.0/plans/standard-16c64g400/instance-schema.json
new file mode 100644
index 0000000..66ebbaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-16c64g400/instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-16c64g400/meta.yaml b/addons/mysql-basic/8.0/plans/standard-16c64g400/meta.yaml
new file mode 100644
index 0000000..e9292de
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-16c64g400/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-16c64g400"
+id: 74e9bc7a-4b4f-11f1-8911-57273629d5bc
+description: "Mysql Cluster standard-16c64g400 plan: Disk 400Gi ,vCPUs 16 , RAM 64G , DB MAX Connection 1600"
+displayName: "standard-16c64g400"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/mysql-basic/8.0/plans/standard-16c64g400/values.yaml b/addons/mysql-basic/8.0/plans/standard-16c64g400/values.yaml
new file mode 100644
index 0000000..8decc1b
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-16c64g400/values.yaml
@@ -0,0 +1,88 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-mysql-standard-400
+
+## MinIO&reg; containers' resource requests and limits
+## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+## We usually recommend not to specify default resources and to leave this as a conscious
+## choice for the user. This also increases chances charts run on environments with little
+## resources, such as Minikube. If you do want to specify resources, uncomment the following
+## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+## @param resources.limits The resources limits for the MinIO&reg; container
+## @param resources.requests The requested resources for the MinIO&reg; container
+##
+primary: 
+  extraConfig: |
+    [mysqld]
+    innodb_io_capacity=2000
+    innodb_io_capacity_max=3000
+    max_connect_errors=1000000
+    open_files_limit=2000000                                     
+    performance_schema_max_table_instances=200
+    thread_cache_size=0
+    innodb_flush_method=O_DIRECT
+    innodb_read_io_threads=32               
+    innodb_write_io_threads=32
+    innodb_buffer_pool_instances=16
+    innodb_buffer_pool_size=42949672960
+    max_connections=16000
+  resources:
+    limits:
+      cpu: 16000m
+      memory: 64Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
+
+## @section Persistence parameters
+
+## Enable persistence using Persistent Volume Claims
+## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+##
+  persistence:
+    ## @param primary.persistence.enabled Enable persistence on MySQL primary replicas using a `PersistentVolumeClaim`. If false, use emptyDir
+    ##
+    enabled: true
+    ## @param primary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL primary replicas
+    ## NOTE: When it's set the rest of persistence parameters are ignored
+    ##
+    existingClaim: ""
+    ## @param primary.persistence.storageClass MySQL primary persistent volume storage Class
+    ## If defined, storageClassName: <storageClass>
+    ## If set to "-", storageClassName: "", which disables dynamic provisioning
+    ## If undefined (the default) or set to null, no storageClassName spec is
+    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+    ##   GKE, AWS & OpenStack)
+    ##
+    storageClass: ""
+    ## @param primary.persistence.annotations MySQL primary persistent volume claim annotations
+    ##
+    annotations: {}
+    ## @param primary.persistence.accessModes MySQL primary persistent volume access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param primary.persistence.size MySQL primary persistent volume size
+    ##
+    size: 400Gi
+    ## @param primary.persistence.selector Selector to match an existing Persistent Volume
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+
+router:
+  replicaCount: 4
+  configuration: |-
+    [DEFAULT]
+    max_total_connections = 3900
+    [routing:bootstrap_rw]
+    max_connections= 3900
+  resources:
+    limits: 
+      cpu: 1600m
+      memory: 2Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-2c4g20/bind.yaml b/addons/mysql-basic/8.0/plans/standard-2c4g20/bind.yaml
new file mode 100644
index 0000000..e075d73
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c4g20/bind.yaml
@@ -0,0 +1,30 @@
+credential:
+{{- if (eq .Values.primary.service.type "LoadBalancer") }}
+  - name: EXTRANET_HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}
+        jsonpath: '{ .status.loadBalancer.ingress[*].ip }'
+{{- end }}
+  - name: DOMAIN
+    value: {{ template "common.names.fullname" . }}.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}
+  - name: HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}
+        jsonpath: '{ .spec.clusterIP }'
+  - name: PASSWORD
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.password }' 
+  - name: USERNAME
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.username }' 
+  - name: PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.port }' 
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-2c4g20/instance-schema.json b/addons/mysql-basic/8.0/plans/standard-2c4g20/instance-schema.json
new file mode 100644
index 0000000..66ebbaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c4g20/instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-2c4g20/meta.yaml b/addons/mysql-basic/8.0/plans/standard-2c4g20/meta.yaml
new file mode 100644
index 0000000..0ad253d
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c4g20/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-2c4g20"
+id: 6ee79fb8-4b4f-11f1-9bc4-67947e761150
+description: "Mysql standard-2c4g20 plan: Disk 20Gi ,vCPUs 2 , RAM 4G , DB MAX Connection 1000"
+displayName: "standard-2c4g20"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/mysql-basic/8.0/plans/standard-2c4g20/values.yaml b/addons/mysql-basic/8.0/plans/standard-2c4g20/values.yaml
new file mode 100644
index 0000000..80d080b
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c4g20/values.yaml
@@ -0,0 +1,73 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-mysql-standard-20
+
+## MinIO&reg; containers' resource requests and limits
+## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+## We usually recommend not to specify default resources and to leave this as a conscious
+## choice for the user. This also increases chances charts run on environments with little
+## resources, such as Minikube. If you do want to specify resources, uncomment the following
+## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+## @param resources.limits The resources limits for the MinIO&reg; container
+## @param resources.requests The requested resources for the MinIO&reg; container
+##
+primary: 
+  extraConfig: |
+    [mysqld]
+    innodb_io_capacity=2000
+    innodb_io_capacity_max=3000
+    max_connect_errors=1000000
+    open_files_limit=2000000                                     
+    performance_schema_max_table_instances=200
+    thread_cache_size=0
+    innodb_flush_method=O_DIRECT
+    innodb_read_io_threads=4                 
+    innodb_write_io_threads=4                      
+    innodb_buffer_pool_instances=2
+    innodb_buffer_pool_size=2147483648
+    max_connections=1000
+  resources:
+    limits:
+      cpu: 2000m
+      memory: 4Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
+
+## @section Persistence parameters
+
+## Enable persistence using Persistent Volume Claims
+## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+##
+  persistence:
+    ## @param primary.persistence.enabled Enable persistence on MySQL primary replicas using a `PersistentVolumeClaim`. If false, use emptyDir
+    ##
+    enabled: true
+    ## @param primary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL primary replicas
+    ## NOTE: When it's set the rest of persistence parameters are ignored
+    ##
+    existingClaim: ""
+    ## @param primary.persistence.storageClass MySQL primary persistent volume storage Class
+    ## If defined, storageClassName: <storageClass>
+    ## If set to "-", storageClassName: "", which disables dynamic provisioning
+    ## If undefined (the default) or set to null, no storageClassName spec is
+    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+    ##   GKE, AWS & OpenStack)
+    ##
+    storageClass: ""
+    ## @param primary.persistence.annotations MySQL primary persistent volume claim annotations
+    ##
+    annotations: {}
+    ## @param primary.persistence.accessModes MySQL primary persistent volume access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param primary.persistence.size MySQL primary persistent volume size
+    ##
+    size: 20Gi
+    ## @param primary.persistence.selector Selector to match an existing Persistent Volume
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-2c8g50/bind.yaml b/addons/mysql-basic/8.0/plans/standard-2c8g50/bind.yaml
new file mode 100644
index 0000000..a066838
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c8g50/bind.yaml
@@ -0,0 +1,35 @@
+credential:
+{{- if (eq .Values.router.service.type "LoadBalancer") }}
+  - name: EXTRANET_HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .status.loadBalancer.ingress[*].ip }'
+{{- end }}
+  - name: DOMAIN
+    value: {{ template "common.names.fullname" . }}-router.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}
+  - name: HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .spec.clusterIP }'
+  - name: PASSWORD
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.password }' 
+  - name: USERNAME
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.username }' 
+  - name: READONLY_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portro }'
+  - name: READWRITE_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portrw }' 
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-2c8g50/create-instance-schema.json~merged b/addons/mysql-basic/8.0/plans/standard-2c8g50/create-instance-schema.json~merged
new file mode 100644
index 0000000..66ebbaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c8g50/create-instance-schema.json~merged
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-2c8g50/instance-schema.json b/addons/mysql-basic/8.0/plans/standard-2c8g50/instance-schema.json
new file mode 100644
index 0000000..66ebbaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c8g50/instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-2c8g50/meta.yaml b/addons/mysql-basic/8.0/plans/standard-2c8g50/meta.yaml
new file mode 100644
index 0000000..1c11a88
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c8g50/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-2c8g50"
+id: 68a39742-4b4f-11f1-b776-b7eed0799310
+description: "Mysql Cluster standard-2c8g50 plan: Disk 50Gi ,vCPUs 2 , RAM 8G , DB MAX Connection 2000"
+displayName: "standard-2c8g50"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/mysql-basic/8.0/plans/standard-2c8g50/values.yaml b/addons/mysql-basic/8.0/plans/standard-2c8g50/values.yaml
new file mode 100644
index 0000000..3b6d6ff
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-2c8g50/values.yaml
@@ -0,0 +1,87 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-mysql-standard-50
+
+## MinIO&reg; containers' resource requests and limits
+## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+## We usually recommend not to specify default resources and to leave this as a conscious
+## choice for the user. This also increases chances charts run on environments with little
+## resources, such as Minikube. If you do want to specify resources, uncomment the following
+## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+## @param resources.limits The resources limits for the MinIO&reg; container
+## @param resources.requests The requested resources for the MinIO&reg; container
+##
+primary: 
+  extraConfig: |
+    [mysqld]
+    innodb_io_capacity=2000
+    innodb_io_capacity_max=3000
+    max_connect_errors=1000000
+    open_files_limit=2000000                                     
+    performance_schema_max_table_instances=200
+    thread_cache_size=0
+    innodb_flush_method=O_DIRECT
+    innodb_read_io_threads=4                 
+    innodb_write_io_threads=4                      
+    innodb_buffer_pool_instances=2
+    innodb_buffer_pool_size=4294967296
+    max_connections=2000
+  resources:
+    limits:
+      cpu: 2000m
+      memory: 8Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
+  
+## @section Persistence parameters
+
+## Enable persistence using Persistent Volume Claims
+## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+##
+  persistence:
+    ## @param primary.persistence.enabled Enable persistence on MySQL primary replicas using a `PersistentVolumeClaim`. If false, use emptyDir
+    ##
+    enabled: true
+    ## @param primary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL primary replicas
+    ## NOTE: When it's set the rest of persistence parameters are ignored
+    ##
+    existingClaim: ""
+    ## @param primary.persistence.storageClass MySQL primary persistent volume storage Class
+    ## If defined, storageClassName: <storageClass>
+    ## If set to "-", storageClassName: "", which disables dynamic provisioning
+    ## If undefined (the default) or set to null, no storageClassName spec is
+    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+    ##   GKE, AWS & OpenStack)
+    ##
+    storageClass: ""
+    ## @param primary.persistence.annotations MySQL primary persistent volume claim annotations
+    ##
+    annotations: {}
+    ## @param primary.persistence.accessModes MySQL primary persistent volume access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param primary.persistence.size MySQL primary persistent volume size
+    ##
+    size: 50Gi
+    ## @param primary.persistence.selector Selector to match an existing Persistent Volume
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+router:
+  replicaCount: 2
+  configuration: |-
+    [DEFAULT]
+    max_total_connections = 900
+    [routing:bootstrap_rw]
+    max_connections= 900
+  resources:
+    limits: 
+      cpu: 500m
+      memory: 512Mi
+    requests: 
+      cpu: 100m
+      memory: 512Mi
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-32c128g800/bind.yaml b/addons/mysql-basic/8.0/plans/standard-32c128g800/bind.yaml
new file mode 100644
index 0000000..a066838
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-32c128g800/bind.yaml
@@ -0,0 +1,35 @@
+credential:
+{{- if (eq .Values.router.service.type "LoadBalancer") }}
+  - name: EXTRANET_HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .status.loadBalancer.ingress[*].ip }'
+{{- end }}
+  - name: DOMAIN
+    value: {{ template "common.names.fullname" . }}-router.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}
+  - name: HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .spec.clusterIP }'
+  - name: PASSWORD
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.password }' 
+  - name: USERNAME
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.username }' 
+  - name: READONLY_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portro }'
+  - name: READWRITE_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portrw }' 
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-32c128g800/instance-schema.json b/addons/mysql-basic/8.0/plans/standard-32c128g800/instance-schema.json
new file mode 100644
index 0000000..66ebbaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-32c128g800/instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-32c128g800/meta.yaml b/addons/mysql-basic/8.0/plans/standard-32c128g800/meta.yaml
new file mode 100644
index 0000000..980e272
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-32c128g800/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-32c128g800"
+id: 62017ada-4b4f-11f1-bf0d-9750eda6139a
+description: "Mysql Cluster standard-32c128g800 plan: Disk 800Gi ,vCPUs 32 , RAM 128G , DB MAX Connection 32000"
+displayName: "standard-32c128g800"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/mysql-basic/8.0/plans/standard-32c128g800/values.yaml b/addons/mysql-basic/8.0/plans/standard-32c128g800/values.yaml
new file mode 100644
index 0000000..b6c29a0
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-32c128g800/values.yaml
@@ -0,0 +1,87 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-mysql-standard-800
+
+## MinIO&reg; containers' resource requests and limits
+## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+## We usually recommend not to specify default resources and to leave this as a conscious
+## choice for the user. This also increases chances charts run on environments with little
+## resources, such as Minikube. If you do want to specify resources, uncomment the following
+## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+## @param resources.limits The resources limits for the MinIO&reg; container
+## @param resources.requests The requested resources for the MinIO&reg; container
+##
+primary: 
+  extraConfig: |
+    [mysqld]
+    innodb_io_capacity=2000
+    innodb_io_capacity_max=3000
+    max_connect_errors=1000000
+    open_files_limit=2000000                                     
+    performance_schema_max_table_instances=200
+    thread_cache_size=0
+    innodb_flush_method=O_DIRECT
+    innodb_read_io_threads=64              
+    innodb_write_io_threads=64
+    innodb_buffer_pool_instances=32
+    innodb_buffer_pool_size=85899345920
+    max_connections=32000
+  resources:
+    limits:
+      cpu: 32000m
+      memory: 128Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
+
+## @section Persistence parameters
+
+## Enable persistence using Persistent Volume Claims
+## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+##
+  persistence:
+    ## @param primary.persistence.enabled Enable persistence on MySQL primary replicas using a `PersistentVolumeClaim`. If false, use emptyDir
+    ##
+    enabled: true
+    ## @param primary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL primary replicas
+    ## NOTE: When it's set the rest of persistence parameters are ignored
+    ##
+    existingClaim: ""
+    ## @param primary.persistence.storageClass MySQL primary persistent volume storage Class
+    ## If defined, storageClassName: <storageClass>
+    ## If set to "-", storageClassName: "", which disables dynamic provisioning
+    ## If undefined (the default) or set to null, no storageClassName spec is
+    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+    ##   GKE, AWS & OpenStack)
+    ##
+    storageClass: ""
+    ## @param primary.persistence.annotations MySQL primary persistent volume claim annotations
+    ##
+    annotations: {}
+    ## @param primary.persistence.accessModes MySQL primary persistent volume access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param primary.persistence.size MySQL primary persistent volume size
+    ##
+    size: 800Gi
+    ## @param primary.persistence.selector Selector to match an existing Persistent Volume
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+router:
+  replicaCount: 4
+  configuration: |-
+    [DEFAULT]
+    max_total_connections = 7900
+    [routing:bootstrap_rw]
+    max_connections= 7900
+  resources:
+    limits: 
+      cpu: 3200m
+      memory: 4Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-4c16g100/bind.yaml b/addons/mysql-basic/8.0/plans/standard-4c16g100/bind.yaml
new file mode 100644
index 0000000..a066838
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-4c16g100/bind.yaml
@@ -0,0 +1,35 @@
+credential:
+{{- if (eq .Values.router.service.type "LoadBalancer") }}
+  - name: EXTRANET_HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .status.loadBalancer.ingress[*].ip }'
+{{- end }}
+  - name: DOMAIN
+    value: {{ template "common.names.fullname" . }}-router.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}
+  - name: HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .spec.clusterIP }'
+  - name: PASSWORD
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.password }' 
+  - name: USERNAME
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.username }' 
+  - name: READONLY_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portro }'
+  - name: READWRITE_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portrw }' 
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-4c16g100/instance-schema.json b/addons/mysql-basic/8.0/plans/standard-4c16g100/instance-schema.json
new file mode 100644
index 0000000..66ebbaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-4c16g100/instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-4c16g100/meta.yaml b/addons/mysql-basic/8.0/plans/standard-4c16g100/meta.yaml
new file mode 100644
index 0000000..8dd241e
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-4c16g100/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-4c16g100"
+id: 5a7781ec-4b4f-11f1-a392-d7b1c6a70ebb
+description: "Mysql Cluster standard-4c16g100 plan: Disk 100Gi ,vCPUs 4 , RAM 16G , DB MAX Connection 4000"
+displayName: "standard-4c16g100"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/mysql-basic/8.0/plans/standard-4c16g100/values.yaml b/addons/mysql-basic/8.0/plans/standard-4c16g100/values.yaml
new file mode 100644
index 0000000..6c76472
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-4c16g100/values.yaml
@@ -0,0 +1,89 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-mysql-standard-100
+
+## MinIO&reg; containers' resource requests and limits
+## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+## We usually recommend not to specify default resources and to leave this as a conscious
+## choice for the user. This also increases chances charts run on environments with little
+## resources, such as Minikube. If you do want to specify resources, uncomment the following
+## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+## @param resources.limits The resources limits for the MinIO&reg; container
+## @param resources.requests The requested resources for the MinIO&reg; container
+##
+primary: 
+  extraConfig: |
+    [mysqld]
+    innodb_io_capacity=2000
+    innodb_io_capacity_max=3000
+    max_connect_errors=1000000
+    open_files_limit=2000000                                     
+    performance_schema_max_table_instances=200
+    thread_cache_size=0
+    innodb_flush_method=O_DIRECT
+    innodb_read_io_threads=8                 
+    innodb_write_io_threads=8                          
+    innodb_buffer_pool_instances=4
+    innodb_buffer_pool_size=10737418240
+    max_connections=4000
+
+  resources:
+    limits:
+      cpu: 4000m
+      memory: 16Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
+  
+## @section Persistence parameters
+
+## Enable persistence using Persistent Volume Claims
+## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+##
+  persistence:
+    ## @param primary.persistence.enabled Enable persistence on MySQL primary replicas using a `PersistentVolumeClaim`. If false, use emptyDir
+    ##
+    enabled: true
+    ## @param primary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL primary replicas
+    ## NOTE: When it's set the rest of persistence parameters are ignored
+    ##
+    existingClaim: ""
+    ## @param primary.persistence.storageClass MySQL primary persistent volume storage Class
+    ## If defined, storageClassName: <storageClass>
+    ## If set to "-", storageClassName: "", which disables dynamic provisioning
+    ## If undefined (the default) or set to null, no storageClassName spec is
+    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+    ##   GKE, AWS & OpenStack)
+    ##
+    storageClass: ""
+    ## @param primary.persistence.annotations MySQL primary persistent volume claim annotations
+    ##
+    annotations: {}
+    ## @param primary.persistence.accessModes MySQL primary persistent volume access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param primary.persistence.size MySQL primary persistent volume size
+    ##
+    size: 100Gi
+    ## @param primary.persistence.selector Selector to match an existing Persistent Volume
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+
+router:
+  replicaCount: 3
+  configuration: |-
+    [DEFAULT]
+    max_total_connections = 1200
+    [routing:bootstrap_rw]
+    max_connections= 1200
+  resources:
+    limits: 
+      cpu: 500m
+      memory: 512Mi
+    requests: 
+      cpu: 500m
+      memory: 512Mi
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-8c32g200/bind.yaml b/addons/mysql-basic/8.0/plans/standard-8c32g200/bind.yaml
new file mode 100644
index 0000000..a066838
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-8c32g200/bind.yaml
@@ -0,0 +1,35 @@
+credential:
+{{- if (eq .Values.router.service.type "LoadBalancer") }}
+  - name: EXTRANET_HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .status.loadBalancer.ingress[*].ip }'
+{{- end }}
+  - name: DOMAIN
+    value: {{ template "common.names.fullname" . }}-router.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}
+  - name: HOST
+    valueFrom:
+      serviceRef:
+        name: {{ include "common.names.fullname" . }}-router
+        jsonpath: '{ .spec.clusterIP }'
+  - name: PASSWORD
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.password }' 
+  - name: USERNAME
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.username }' 
+  - name: READONLY_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portro }'
+  - name: READWRITE_PORT
+    valueFrom:
+      secretKeyRef:
+        name: {{ template "common.names.fullname" . }}-svcbind-administrator-user
+        jsonpath: '{ .data.portrw }' 
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-8c32g200/instance-schema.json b/addons/mysql-basic/8.0/plans/standard-8c32g200/instance-schema.json
new file mode 100644
index 0000000..66ebbaa
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-8c32g200/instance-schema.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "imagePullPolicy": {
+      "type": "string",
+      "enum": ["Always", "IfNotPresent", "Never"],
+      "default": "IfNotPresent",
+      "title": "Image pull policy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/addons/mysql-basic/8.0/plans/standard-8c32g200/meta.yaml b/addons/mysql-basic/8.0/plans/standard-8c32g200/meta.yaml
new file mode 100644
index 0000000..3fc8882
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-8c32g200/meta.yaml
@@ -0,0 +1,6 @@
+name: "standard-8c32g200"
+id: 537b6ad4-4b4f-11f1-bde0-47a7255584ae
+description: "Mysql Cluster standard-8c32g200 plan: Disk 200Gi ,vCPUs 8 , RAM 32G , DB MAX Connection 8000"
+displayName: "standard-8c32g200"
+bindable: true
+maximum_polling_duration: 1800
diff --git a/addons/mysql-basic/8.0/plans/standard-8c32g200/values.yaml b/addons/mysql-basic/8.0/plans/standard-8c32g200/values.yaml
new file mode 100644
index 0000000..44e0642
--- /dev/null
+++ b/addons/mysql-basic/8.0/plans/standard-8c32g200/values.yaml
@@ -0,0 +1,88 @@
+## @param fullnameOverride String to fully override common.names.fullname template
+##
+fullnameOverride: hb-mysql-standard-200
+
+## MinIO&reg; containers' resource requests and limits
+## ref: https://kubernetes.io/docs/user-guide/compute-resources/
+## We usually recommend not to specify default resources and to leave this as a conscious
+## choice for the user. This also increases chances charts run on environments with little
+## resources, such as Minikube. If you do want to specify resources, uncomment the following
+## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+## @param resources.limits The resources limits for the MinIO&reg; container
+## @param resources.requests The requested resources for the MinIO&reg; container
+##
+primary: 
+  extraConfig: |
+    [mysqld]
+    innodb_io_capacity=2000
+    innodb_io_capacity_max=3000
+    max_connect_errors=1000000
+    open_files_limit=2000000                                     
+    performance_schema_max_table_instances=200
+    thread_cache_size=0
+    innodb_flush_method=O_DIRECT
+    innodb_read_io_threads=16                 
+    innodb_write_io_threads=16                          
+    innodb_buffer_pool_instances=8
+    innodb_buffer_pool_size=22548578304
+    max_connections=8000
+  resources:
+    limits:
+      cpu: 8000m
+      memory: 32Gi
+    requests:
+      cpu: 100m
+      memory: 1Gi
+
+## @section Persistence parameters
+
+## Enable persistence using Persistent Volume Claims
+## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
+##
+  persistence:
+    ## @param primary.persistence.enabled Enable persistence on MySQL primary replicas using a `PersistentVolumeClaim`. If false, use emptyDir
+    ##
+    enabled: true
+    ## @param primary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL primary replicas
+    ## NOTE: When it's set the rest of persistence parameters are ignored
+    ##
+    existingClaim: ""
+    ## @param primary.persistence.storageClass MySQL primary persistent volume storage Class
+    ## If defined, storageClassName: <storageClass>
+    ## If set to "-", storageClassName: "", which disables dynamic provisioning
+    ## If undefined (the default) or set to null, no storageClassName spec is
+    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
+    ##   GKE, AWS & OpenStack)
+    ##
+    storageClass: ""
+    ## @param primary.persistence.annotations MySQL primary persistent volume claim annotations
+    ##
+    annotations: {}
+    ## @param primary.persistence.accessModes MySQL primary persistent volume access Modes
+    ##
+    accessModes:
+      - ReadWriteOnce
+    ## @param primary.persistence.size MySQL primary persistent volume size
+    ##
+    size: 200Gi
+    ## @param primary.persistence.selector Selector to match an existing Persistent Volume
+    ## selector:
+    ##   matchLabels:
+    ##     app: my-app
+    ##
+    selector: {}
+
+router:
+  replicaCount: 4
+  configuration: |-
+    [DEFAULT]
+    max_total_connections = 1900
+    [routing:bootstrap_rw]
+    max_connections= 1900
+  resources:
+    limits: 
+      cpu: 800m
+      memory: 1024Mi
+    requests:
+      cpu: 100m
+      memory: 1Gi
\ No newline at end of file
