Creating and Deleting MySQL Instances

Page last updated:

This topic describes how you, as a developer, deploy and delete MySQL instances.

Prerequisites

Before you can create or delete MySQL instances, you must have:

  • The Kubernetes Command Line Interface (kubectl) installed. For more information, see the Kubernetes documentation.

  • Full admin access to all Kubernetes resources in your developer namespace.

    For information about Roles and RoleBindings that your Kubernetes cluster admin needs to create, see the Kubernetes documentation.

  • The URL and credentials to access the registry that stores the Tanzu MySQL for Kubernetes images. This can be the VMware Tanzu Network registry or the private registry configured for your environment. If you do not have access to the registry credentials, contact your Kubernetes admin to have these set up for you in your namespace.

Create a MySQL Instance

To create a MySQL instance:

  1. Target the namespace where you want to create the MySQL instance:

    kubectl config set-context --current --namespace=DEVELOPMENT-NAMESPACE
    

    Where DEVELOPMENT-NAMESPACE is the namespace in which you want to create the instance.

    For example:

    $ kubectl config set-context --current --namespace=my-namespace
    

  2. From your namespace, Kubernetes must be able to access the registry that stores the Tanzu MySQL for Kubernetes images. To allow this, create an imagePullSecret by running:

    kubectl --namespace=DEVELOPMENT-NAMESPACE create secret docker-registry tanzu-mysql-image-registry --docker-server=REGISTRY-SERVER-URL --docker-username=DOCKER-USERNAME --docker-password=DOCKER-PASSWORD
    

    Where:

    • DEVELOPMENT-NAMESPACE is the namespace in which you want to create the instance
    • REGISTRY-SERVER-URL is the VMware Tanzu Network registry or the private registry configured for your environment
    • DOCKER-USERNAME and DOCKER-PASSWORD are the credentials used to pull images from the registry.

    For example:

    $ kubectl create secret --namespace=my-namespace \
    docker-registry tanzu-mysql-image-registry  \
    --docker-server=https://registry.pivotal.io/ \
    --docker-username=sample-username  \
    --docker-password=sample-password
    
    secret/tanzu-mysql-image-registry created
    
  3. Find the mysql.yaml deployment template that you downloaded in the Tanzu MySQL Deployment Templates TGZ file from VMware Tanzu Network. For how to download deployment templates, see Download the Resources in Installing the Tanzu SQL for Kubernetes Operator.

  4. Create a copy of the mysql.yaml file and give it a unique name.

    For example:

    $ cp ~/Downloads/tanzu-mysql-deployment-templates-1.0.0/samples/mysql.yaml testdb.yaml
  5. Edit the file. For information about the properties that you can set for the MySQL resource, see Property Reference for the MySQL Resource.

  6. Deploy a MySQL instance to Kubernetes by running:

    kubectl -n DEVELOPMENT-NAMESPACE apply -f FILENAME
    

    Where FILENAME is the name of the configuration file you created in Step 4 above.

    For example:

    $ kubectl -n my-namespace apply -f testdb.yaml
    mysql.with.sql.tanzu.vmware.com/mysql-sample created
    
  7. Verify that the instance was created successfully by running:

    kubectl -n DEVELOPMENT-NAMESPACE get mysql INSTANCE-NAME
    

    Where INSTANCE-NAME is the value that you configured for metadata.name in your file

    For example:

    $ kubectl -n my-namespace get mysql mysql-sample
    NAME           READY   STATUS    AGE
    mysql-sample   true    Running   2m17s
    

Delete a MySQL Instance

This section provides some conceptual information about persistent volume claims (PVCs) and deleting an instance. It also provides the procedure for how to delete an instance.

About PVCs

When you create a MySQL instance, the MySQL Operator also creates PVCs. The PVCs are attached to the instance and contain the data for the MySQL database. Single-node instances have one PVC, and high-availability (HA) instances have three.

The PVC name contains the instance name and the MySQL Pod number. The PVC name is of the form mysql-data-INSTANCE-NAME-N, for example, mysql-data-mysql-sample-0.

About Deleting a MySQL Instance

There are two steps to deleting an instance. The first step is to delete the instance itself, and the second step is to delete the PVCs.

There are situations where you want to delete the instance but not delete the PVC. For example, in a test environment, you might delete the instance to save costs but keep the PVC storing the data. If you later create a new instance with the same name as the deleted instance, the old PVCs automatically reattach to the new instance and you have access to your data again.

Note: If you delete the Pod or the StatefulSet associated with the MySQL resource, the Operator re-creates it for you. To permanently delete the instance, you need to delete the MySQL resource, as described in step 1 below.

Procedure

To delete a MySQL instance:

  1. Delete the MySQL instance by running:

    kubectl -n DEVELOPMENT-NAMESPACE delete mysql INSTANCE-NAME
    

    Where:

    • DEVELOPMENT-NAMESPACE is the namespace where you created the instance.
    • INSTANCE-NAME is the name of the instance you want to delete.

    For example:

    $ kubectl -n my-namespace delete mysql mysql-sample
    my-namespace "mysql-sample" deleted
    
  2. (Optional) Delete the PVCs by running:

    Warning: This command is destructive. When you destroy your PVCs, you delete all data associated with your Tanzu MySQL for Kubernetes database.

    kubectl delete pvc -l app.kubernetes.io/instance=INSTANCE-NAME
    

    Where INSTANCE-NAME is the name of the MySQL instance that you deleted above.

    For example:

    $ kubectl delete pvc -l app.kubernetes.io/instance=mysql-sample
    persistentvolumeclaim "mysql-data-mysql-sample-0" deleted

    Note: For HA MySQL instances, the command deletes all three PVCs associated with the MySQL instance.