> ## Documentation Index
> Fetch the complete documentation index at: https://cockroachlabs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Classic Bulk Load Migration

export const InternalLink = ({version, path = "", children, ...props}) => {
  let detectedVersion = version || "stable";
  if (typeof window !== 'undefined' && !version) {
    const match = window.location.pathname.match(/\/docs\/([^/]+)/);
    if (match) {
      detectedVersion = match[1];
    }
  }
  const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
  return <a href={`/docs/${detectedVersion}/${normalizedPath}`} {...props}>
      {children}
    </a>;
};

A *Classic Bulk Load Migration* is the simplest way of <InternalLink path="migration-overview">migrating data to CockroachDB</InternalLink>. In this approach, you stop application traffic to the source database and migrate data to the target cluster using <InternalLink path="molt-fetch">MOLT Fetch</InternalLink> during a **significant downtime window**. Application traffic is then cut over to the target after schema finalization and data verification.

* All source data is migrated to the target <InternalLink path="migration-considerations-granularity">at once</InternalLink>.

* This approach does not utilize <InternalLink path="migration-considerations-replication">continuous replication</InternalLink>.

* <InternalLink path="migration-considerations-rollback">Rollback</InternalLink> is manual, but in most cases it's simple, as the source database is preserved and write traffic begins on the target all at once. If you wish to roll back before the target has received any writes that are not present on the source database, nothing needs to be done. If you wish to roll back after the target has received writes that are not present on the source database, you must manually replicate these new rows on the source.

This approach is best for small databases (\<100 GB), internal tools, dev/staging environments, and production environments that can handle business disruption. It's a simple approach that guarantees full data consistency and is easy to execute with limited resources, but it can only be performed if your system can handle significant downtime.

This page describes an example scenario. While the commands provided can be copy-and-pasted, they may need to be altered or reconsidered to suit the needs of your specific environment.

<img src="https://mintcdn.com/cockroachlabs/mEy4bzaxzRbvNkMw/images/molt/molt_classic_bulk_load_flow.svg?fit=max&auto=format&n=mEy4bzaxzRbvNkMw&q=85&s=40bf2d50251f71aa97e4466348e2e0ca" alt="Classic Bulk Load Migration flow" style={{ maxWidth: "100%", display: "block", marginLeft: "auto", marginRight: "auto" }} width="456" height="274" data-path="images/molt/molt_classic_bulk_load_flow.svg" />

## Example scenario

You have a small (50 GB) database that provides the data store for a web application. You want to migrate the entirety of this database to a new CockroachDB cluster. You schedule a maintenance window for Saturday from 2 AM to 6 AM, and announce it to your users several weeks in advance.

The application runs on a Kubernetes cluster.

**Estimated system downtime:** 4 hours.

## Step-by-step walkthroughs

The following walkthroughs demonstrate how to use the MOLT tools to perform this migration for each supported source database:

* <InternalLink path="classic-bulk-load-postgres">Classic Bulk Load Migration from PostgreSQL</InternalLink>
* <InternalLink path="classic-bulk-load-mysql">Classic Bulk Load Migration from MySQL</InternalLink>
* <InternalLink path="classic-bulk-load-oracle">Classic Bulk Load Migration from Oracle</InternalLink>

<Note>
  For CockroachDB-to-CockroachDB migrations, contact your account team for guidance.
</Note>

## See also

* <InternalLink path="migration-overview">Migration Overview</InternalLink>
* <InternalLink path="migration-considerations">Migration Considerations</InternalLink>
* <InternalLink path="migration-approach-phased-bulk-load">Phased Bulk Load Migration</InternalLink>
* <InternalLink path="molt-fetch">MOLT Fetch</InternalLink>
* <InternalLink path="molt-verify">MOLT Verify</InternalLink>
