Using VMware Tanzu SQL with MySQL for VMs

Note: In v2.9 and later, MySQL for VMware Tanzu is named VMware Tanzu SQL with MySQL for VMs.

Page last updated:

This topic provides instructions for developers using the VMware Tanzu SQL with MySQL for VMs service for their VMware Tanzu Application Service for VMs apps.

Overview

Tanzu SQL for VMs provides a relational database for apps and devices. To use Tanzu SQL for VMs in an app:

  1. Check the service availability in the Marketplace, and see if there is an existing instance of Tanzu SQL for VMs in your space.

    See Confirm the Tanzu SQL for VMs Service Availability, below.

  2. If there is no existing instance or you want to use a different one, create an instance of the Tanzu SQL for VMs service in the same space as the app.

    See Create a Service Instance, below.

  3. Bind the app to the Tanzu SQL for VMs service instance, to enable the app to use MySQL.

    See Bind a Service Instance to Your App, below.

  4. Call the Tanzu SQL for VMs service in your app code, and then re-push your app into the space.

    See Use the MySQL Service in Your App, below.

After you create a Tanzu SQL for VMs service instance, you can manage it over the life cycle of your apps and data. See Manage Service Instances, below.

The below procedures use the Cloud Foundry Command Line Interface (cf CLI). For more information, see Managing Service Instances with the cf CLI. You can also use Apps Manager to do the same tasks using a graphical UI. For more information, see Managing Apps and Service Instances Using Apps Manager

Prerequisites

To use Tanzu SQL for VMs with your TAS for VMs apps, you must:

  • Decide what type of plan you want from the following options: single node, leader-follower, highly available (HA) cluster, and Multi‑Site Replication. Multi‑Site Replication is used to deploy a leader-follower service instance across multiple foundations or data centers. Your marketplace might not offer all of these plan types.
    For more information about service plans, see Availability Options.
  • If you intend to use a Multi‑Site Replication plan for deploying a leader-follower service instance across multiple foundations or data centers, review the limitations associated with this topology.
    For more information, see Multi‑Site Replication Limitations.
  • If you intend to use an HA cluster plan, review the limitations associated with this plan type.
    For more information, see Highly Available Cluster Limitations.
  • Have an Ops Manager installation with Tanzu SQL for VMs installed and listed in the Marketplace.
    For how to verify availability in the Marketplace, see Confirm Service Availability below.
  • Have a Space Developer or Admin account on the TAS for VMs installation.
    For more information, see User Roles.
  • Have a local machine with the following installed:
  • Log in to the org and space containing your app. For instructions, see Log In With the CLI.

Confirm the Tanzu SQL for VMs Service Availability

For an app to use the Tanzu SQL for VMs service, both of the following must be true:

  • The service must be available in the Marketplace for its space.
  • An instance of the service must exist in its space.

You can confirm both of these using the cf CLI as follows.

Check Service Availability in the Marketplace

To find out if a Tanzu SQL for VMs service is available in the Marketplace:

  1. Enter the following command:

    cf marketplace
    
  2. If the output lists p.mysql in the service column, Tanzu SQL for VMs is available. If it is not available, ask your operator to install it.

    $ cf marketplace
    Getting services from marketplace in org my-org / space my-space as user@example.com...
    OK
    service             plans          description
    [...]
    p.mysql             db-small       Dedicated instances of MySQL service to provide a relational database
    [...]
    

Check That an Instance Is Running in the Space

To confirm that a Tanzu SQL for VMs instance is running in the space:

  1. Use the cf CLI or Apps Manager to log in to the org and space that contains the app.
  2. Enter the following command:

    cf services
    
  3. Any p.mysql listings in the service column are service instances of Tanzu SQL for VMs in the space.

    For example:

    $ cf services
    Getting services in org my-org / space my-space as user@example.com...
    OK
    name          service     plan        bound apps    last operation
    my-instance   p.mysql     db-small                  create succeeded
    
    You can bind your app to an existing instance or create a new instance to bind to your app.

Create a Service Instance

On-demand services are created asynchronously, not immediately. The watch command shows you when your service instance is ready to bind and use.

Note: If you are deploying a leader-follower service instance across multiple foundations, follow the procedure in Using Tanzu SQL for VMs for Multi‑Site Replication.

To create an instance of the Tanzu SQL for VMs service:

  1. Create a service instance by running the following command:

    cf create-service p.mysql PLAN SERVICE-INSTANCE
    

    Where:

    • PLAN is the name of the Tanzu SQL for VMs plan you want to use.
    • SERVICE-INSTANCE is a name you choose to identify the service instance. This name appears under service in output from cf services.
  2. Enter the following command and wait for the last operation for your instance to show as create succeeded.

    watch cf services
    

    For example:

    $ cf create-service p.mysql db-small my-instance
    Creating service my-instance in org my-org / space my-space as user@example.com... OK
    $ watch cf services
    Getting services in org my-org / space my-space as user@example.com... OK name service plan bound apps last operation my-instance p.mysql db-small create succeeded

    If you get an error, see Troubleshooting Instances.

Bind a Service Instance to Your App

For an app to use a service, you must bind the app to a service instance. You must do this after every time you run cf push.

To push and bind an app to a Tanzu SQL for VMs instance run the following command:

  1. Push your app into the same space as your Tanzu SQL for VMs service instance by running the following command:

    cf push
    
  2. Bind your app to a Tanzu SQL for VMs instance by running the following command:

    cf bind-service APP SERVICE-INSTANCE
    

    Where:

    • APP is the app you want to use the MySQL service instance.
    • SERVICE-INSTANCE is the name you supplied when you ran cf create-service.

    For example:

    $ cf bind-service my-app my-instance
    Binding service mydb to my-app in org my-org / space test as user@example.com... OK TIP: Use 'cf push' to ensure your env variable changes take effect
  3. Restart your app by running the following command:

    cf restart APP
    

    Where APP is the app you want to use the MySQL service instance.

Use the MySQL Service in Your App

To access the MySQL service from your app:

  1. Verify that your app code (or the MySQL client library that the app uses) retries in the case of DNS timeouts.

  2. Locate the connection strings listed in the VCAP_SERVICES > credentials object for your app. For information about VCAP_SERVICES, see MySQL Environment Variables below.

  3. In your app code, call the MySQL service using the connection strings.

    See this example Node.js code.

Use Custom Schemas

Tanzu SQL for VMs supports multiple custom schemas. You can use custom schemas with apps that share a MySQL service instance to isolate app data by schema. By default, service bindings use the default schema service_instance_db.

To use custom schemas in your apps:

  1. Bind your app to the custom schema by running:

      cf bind-service APP SERVICE-INSTANCE -c '{"schema":"CUSTOM-SCHEMA"}'
    

    Where:

    • APP is the app you want to use the custom schema.
    • SERVICE-INSTANCE is the name of your service instance.
    • CUSTOM-SCHEMA is the name of your custom schema. Valid characters include uppercase and lowercase letters, digits, $, and _.
  2. Restart your app by running:

    cf restart APP
    

    Where APP is the app you want to use the custom schema.

MySQL Environment Variables

Apps running in Ops Manager gain access to bound service instances through an environment variable credentials hash called VCAP_SERVICES. This environment variable includes the credentials that apps use to access service instances.

For example:

{
  "p.mysql": [
    {
      "label": "p.mysql",
      "name": "my-instance",
      "plan": "db-medium",
      "provider": null,
      "syslog_drain_url": null,
      "tags": [
        "mysql"
      ],
      "credentials": {
        "hostname": "10.0.0.20",
        "jdbcUrl": "jdbc:mysql://10.0.0.20:3306/service_instance_db?user=fefcbe8360854a18a7994b870e7b0bf5\u0026password=z9z6eskdbs1rhtxt",
        "name": "service_instance_db",
        "password": "z9z6eskdbs1rhtxt",
        "port": 3306,
        "uri": "mysql://fefcbe8360854a18a7994b870e7b0bf5:z9z6eskdbs1rhtxt@10.0.0.20:3306/service_instance_db?reconnect=true",
        "username": "fefcbe8360854a18a7994b870e7b0bf5"
      },
      "volume_mounts": []
    }
  ]
}

You can search for your service by the name given when the service instance was created. You can also search using the tags or label properties. The credentials property can be used to provide access to the MySQL protocol.

VCAP_SERVICES is only modified when an app is bound to a service instance. If you modify your service instance, you must cf unbind-service, cf bind-service and cf restage your app to apply the changes to VCAP_SERVICES.

Note: If you use MySQL Connector/J 8.0.13 or later with Tanzu SQL for VMs, you must modify the JDBC URL in VCAP_SERVICES to include sslMode=VERIFY_IDENTITY and verifyServerCertificate=true. MySQL Connector/J 8.0.13 and later does not verify TLS connections. For more information about JDBC URL syntax, see the MySQL documentation.

Warning: If a developer rebinds an app to the Tanzu SQL for VMs service after unbinding, they must also rebind any existing custom schemas to the app. When you rebind an app, stored code, programs, and triggers break. For more information about binding custom schemas, see Use Custom Schemas.

Manage a Service Instance

You can manage service instances in the following ways:

Migrate Data to a Different Plan

You can use cf update-service to migrate data to a different plan. When you update a service instance, you do not need to rebind your app or service keys. However, when you migrate data to a new service instance the database is unavailable for several minutes.

For more information about using cf update-service, see the Cloud Foundry CLI Reference Guide.

The following table lists migration use cases for the update-service command:

Use update-service for migrating from… To…
Single Node larger Single Node
Leader-Follower larger Leader-Follower
Single Node Leader-Follower of the same or larger size
Leader-Follower Single Node of the same or larger size

Warning: You cannot use cf update-service to migrate data between an HA cluster plan and a plan of another topology. If you want to do this, you must use the cf mysql-tools plugin instead. For more information about migrating data, see About Data Migration in VMware Tanzu SQL with MySQL for VMs.

Warning: If you are using multi‑site replication, you must not update the Multi‑Site Replication plan to a plan of another topology. If you do this, your replication breaks.

To migrate a service instance to another plan:

  1. View the available service plans for Tanzu SQL for VMs by running:

    cf marketplace
    
  2. Migrate data to another plan by running:

    cf update-service SERVICE-INSTANCE -p PLAN
    

    Where PLAN is the plan you want to update the service instance to.

    For example:

    $ cf update-service my-instance -p db-large
    

Upgrade an Individual Service Instance

Note: Before you individually upgrade service instances you must have cf CLI v6.46.0 or later.

You can use cf update-service with the --upgrade flag to individually upgrade on-demand service instances to the latest version of Tanzu SQL for VMs. When you upgrade a service instance, you do not need to rebind your app or service keys. However, when you upgrade a service instance the database is unavailable for several minutes.

For more information about using cf update-service, see the Cloud Foundry CLI Reference Guide.

To upgrade a single service instance:

  1. Confirm that an upgrade is available for the service instance by running:

    cf services

    The upgrade is available when the upgrade available column in the output says yes.

    For example:

    $ cf services
    Getting services in org system / space system as admin...
    
    name         service    plan      bound apps  last operation    broker                  upgrade available
    my-instance  p.mysql    db-small              create succeeded  dedicated-mysql-broker  yes
    
  2. Upgrade the service instance by running:

     cf update-service SERVICE-INSTANCE-NAME --upgrade
  3. When prompted, confirm that you want to upgrade.

Share Service Instances

In Tanzu SQL for VMs you can share service instances between different orgs and spaces using cf share-service. Service instance sharing is enabled by default.

For more information about service instance sharing, see Sharing Service Instances.

To share a service instance:

  1. Target the source org and space for the service instance you want to share by running:

    cf target -o SOURCE-ORG -s SOURCE-SPACE
    

    Where:

    • SOURCE-ORG is the source org for your service instance.
    • SOURCE-SPACE is the source space for your service instance.
  2. Share your service instance to the destination org and space by running:

    cf share-service SERVICE-INSTANCE -o DESTINATION-ORG -s DESTINATION-SPACE
    

    Where:

    • SERVICE-INSTANCE is the service instance you want to share.
    • DESTINATION-ORG is the destination org for the service instance.
    • DESTINATION-SPACE is the destination space for the service instance.
  3. Target the destination org and space by running:

    cf target -o DESTINATION-ORG -s DESTINATION-SPACE
    
  4. Confirm the service instance was shared by running:

    cf service SERVICE-INSTANCE
    

    Where SERVICE-INSTANCE is the service instance you shared.

Unbind an App from a Service Instance

If you want stop an app from using a service you must unbind the app from the service.

  1. Unbind your app by running:

    cf unbind-service APP SERVICE-INSTANCE
    

    Where:

    • APP is the app you want to stop using the MySQL service instance.
    • SERVICE-INSTANCE is the name you supplied when you ran cf create-service.

    For example:

    $ cf unbind-service my-app my-instance
    Unbinding app my-app from service my-instance in org my-org / space my-space as user@example.com... OK

Warning: If a developer rebinds an app to the Tanzu SQL for VMs service after unbinding, they must also rebind any existing custom schemas to the app. When you rebind an app, stored code, programs, and triggers break. For more information about binding custom schemas, see Use Custom Schemas.

Delete a Service Instance

You cannot delete a service instance that an app is bound to.

To delete a service instance:

  1. Run the following command:

    cf delete-service SERVICE-INSTANCE
    

    Where SERVICE-INSTANCE is the name of the service to delete.

    For example:

    $ cf delete-service my-instance
    Are you sure you want to delete the service my-instance ? y Deleting service my-service in org my-org / space my-space as user@example.com... OK
  2. Enter the following command and wait for a Service instance not found error indicating that the instance no longer exists:

    watch cf service SERVICE-INSTANCE