This is a package based heavily on sqlite-dump for Python by simonw but modified to be suitable for the current state of the open alpha, experimental backend (beta), databases.
See Cretezy's fork for a direct D1 HTTP API version.
This script has been tested on a 50mb+ database.
npm i @nora-soderlund/cloudflare-d1-backups
Creating a backup creates a SQL file in the destination R2 bucket.
- Install the package:
npm install @nora-soderlund/cloudflare-d1-backups
. - Call
createBackup(D1Database, R2Bucket, CreateBackupOptions | undefined)
from an execution context.
fileName
: the file name, or a function that returns a string, for the SQL file in the R2 bucket, default isbackups/${(new Date()).toUTCString()}.sql
.maxBodySize
: the maximum body size for R2 bucket uploads in MB, this depends on your plan, unless you're using Enterprise with a custom size, leave this unset.queryLimit
: the row offset limit for each SELECT query, defaults to 1000. Alter depending on your row size.excludeTablesData
: name of the tables from which you do not want to include data, ['example1'] (Array)tableNames
: optional array of strings as table names, case sensitive
Assuming you've downloaded the backed up SQL file from your R2 bucket: npx wrangler d1 execute <database> --file=<backup.sql>
See /example for an example worker.