How to Add Standby Nodes to MySQL Database Clusters

MySQL is an open source, object-relational database built with speed and reliability in mind. Its large and active developer community has created many third-party applications, tools, and libraries that expand MySQL’s functionality.


In a database cluster, standby nodes maintain a copy of the primary node. If the primary node fails, a standby node is automatically promoted to replace it. MySQL clusters can have up to two standby nodes.

Note
Standby nodes differ from read-only nodes, which provide geographically distinct horizontal read scaling.

You can add standby nodes during cluster creation in the cluster configuration section of the create page.

You can also add standby nodes to an existing database cluster. From the Databases page, click the name of the cluster to go to its Overview page, then click the Settings tab.

Screenshot of cluster settings page

On the Settings page, in the Cluster configuration section, click Edit. Open the Standby Nodes dropdown and choose the number of standby nodes.

Note
Due to the memory requirements of replication, standby nodes are only supported for plans with 2GB of RAM or more.
Screenshot of Add Standby Nodes

When you’re done, click Save to immediately provision the standby nodes. The time to complete varies depending on the size of the primary node and its data, but we recommend allowing at least 5 minutes.

Use Standby Nodes for Reads

You can also use standby nodes for reads, to improve your cluster’s performance. However, doing so can result in the standby nodes being too overwhelmed to properly replace the primary node in case of failure.

To use standby nodes for reads, you can find the standby nodes’ hostname via the API.

How to retrieve an existing database cluster using the DigitalOcean API

To retrieve an existing database cluster using the DigitalOcean API, follow these steps:

  1. Create a personal access token, and save it for use with the API.

  2. Send a GET request to https://api.digitalocean.com/v2/databases/{database_cluster_uuid}

    cURL

    To retrieve an existing database cluster with cURL, call:

    
                    curl -X GET \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
      "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"

    Go

    Go developers can use Godo, the official DigitalOcean V2 API client for Go. To retrieve an existing database cluster with Godo, use the following code:

    
                    import (
        "context"
        "os"
    
        "github.com/digitalocean/godo"
    )
    
    func main() {
        token := os.Getenv("DIGITALOCEAN_TOKEN")
    
        client := godo.NewFromToken(token)
        ctx := context.TODO()
    
        cluster, _, err := client.Databases.Get(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30")
    }

    Python

    
                    import os
    from pydo import Client
    
    client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
    
    get_resp = client.databases.get_cluster(database_cluster_uuid="a7a89a")

And you can find the standby nodes’ IP addresses by querying DNS. For example:

dig +short A replica-db-redis-tutorial-redis-watch-local-do-user-0.c.db.ondigitalocean.com
123.45.67.89
123.456.78.901

Traffic you send to multiple standby nodes is not load balanced. In order to load balance this traffic, you can either use a client that does it natively or look up the IPs with a tool such as dig.