# How to Migrate Valkey Databases Valkey is a high-performance, open-source database that stores key-value data in memory, and is designed for caching, message queues, and primary database use. Fully compatible with Redis, Valkey serves as a drop-in replacement. You can migrate existing on-premise or cloud hosted Valkey databases to clusters in your DigitalOcean account. Migrating a database establishes a connection with an existing database and replicates its contents to the new database cluster. If the existing database is continuously being written to, the migration process continues until there is no more data to replicate or you manually stop the migration. We do not currently support migrating managed database clusters on DigitalOcean to other managed database clusters on DigitalOcean using continuous migration. For example, you cannot migrate a managed database cluster from one DigitalOcean account to another. However, you can migrate with a dump. ## Prerequisites To migrate an existing database to a DigitalOcean database cluster, you need to reference the source database’s connection credentials and to disable or update any firewalls between the databases. **Warning**: Before migrating a database, ensure that the source’s Valkey version is not newer than the target cluster’s. This can result in an error that causes migration to fail. ### Reference Source Database’s Credentials Before migrating an existing database, you need the following information about the source database: - **Hostname or connection string** - The public hostname, connection string, or IP address used to connect to the database. - **Port** - The port used to connect to the database. DigitalOcean clusters connect on port `25061` by default. - **Username** - The username used to connect to the database. The username should have sufficient permissions to access the data you want to migrate. - **Password** - The password used to connect to the database. Reference your database provider’s documentation for details on how to locate this information. ### Update or Disable Firewalls To migrate an existing database, you also need to update or temporarily disable any firewalls protecting the databases to allow the databases to connect to each other. To do this on the target DigitalOcean database, we recommend you [add the source database to its trusted sources](https://docs.digitalocean.com/products/databases/valkey/how-to/secure/index.html.md#add-a-trusted-source-using-the-control-panel). Alternatively, you can [remove all trusted sources](https://docs.digitalocean.com/products/databases/valkey/how-to/secure/index.html.md#firewalls) from the database cluster, exposing it to the public internet. For the source database outside of DigitalOcean, you may need to update or temporarily disable any firewalls protecting the database before attempting migration. Please refer to your database provider’s documentation to see how to do this. ## Migrate a Database Using the API ## How to Migrate a Database Using the DigitalOcean API 1. [Create a personal access token](https://docs.digitalocean.com/reference/api/create-personal-access-token/index.html.md) and save it for use with the API. 2. Send a PUT request to [`https://api.digitalocean.com/v2/databases/{database_cluster_uuid}/online-migration`](https://docs.digitalocean.com/reference/api/digitalocean//index.html.md#operation/databases_update_onlineMigration). ### cURL Using cURL: ```shell curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \ -d '{"source":{"host":"source-do-user-6607903-0.b.db.ondigitalocean.com","dbname":"defaultdb","port":25060,"username":"doadmin","password":"paakjnfe10rsrsmf"},"disable_ssl":false,"ignore_dbs":["db0","db1"]}' \ "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/online-migration" ``` ### Python Using [PyDo](https://github.com/digitalocean/pydo), the official DigitalOcean API client for Python: ```python import os from pydo import Client client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN")) req = { "source": { "host": "source-do-user-6607903-0.b.db.ondigitalocean.com", "dbname": "defaultdb", "port": 25060, "username": "doadmin", "password": "paakjnfe10rsrsmf" }, "disable_ssl": False "ignore_dbs": ["db0","db1"] } update_resp = client.databases.update_online_migration(database_cluster_uuid="a7a8bas", body=req) ``` ## Migrate a Database Cluster Using the Control Panel To migrate a Valkey database from the [DigitalOcean Control Panel](https://cloud.digitalocean.com), click **Databases** and then select the database you want to migrate to from your list of databases. From the database’s **Overview** page, click the **Actions** button and then select **Set Up Migration**. ![Action menu with Set Up Migration highlighted](https://docs.digitalocean.com/screenshots/databases/valkey-set-up-migration.a54448a73f20b86c8514f59b2e04d0bf5ab25d7c9aabf88995fe80d05d0fd081.png) In the **Valkey migration** window, click **Continue**, then enter the source database’s credentials. Once you have entered the source database’s credentials, click **Start Migration**. A migration status banner opens at the top of the **Overview** page and your target database’s data begins to transfer. ![Valkey migration with credentials](https://docs.digitalocean.com/screenshots/databases/valkey-migration.9cb57dc15954992821f9e90d4d11783b47cacd2f2618a1cf99231c48ab91bfb9.png) You can stop the migration at any time by clicking the **Stop Migration** button in the migration status banner. If you stop migration, the database retains any migrated data. **Warning**: Migrations automatically stop after two weeks. We do not recommend leaving migrations ongoing in order to keep two database clusters in sync. During migration, you can still write to the target database, but avoid the following actions because they may result in conflicts and replication issues: - Do not manually alter the source database’s replication configuration. - Do not make changes to either database that could prevent the source and target database from connecting with each other. This includes updating or enabling firewalls/trusted sources on either database.