Data Archiving for Salesforce
Docker + MySQL
Configure an archive workflow that keeps historical records useful while separating retention from everyday operations.
What you will leave with
An agreed archive scope, a verified destination copy, and a retrieval test before any source cleanup is considered.
In this guide
Deployment model
Configure a defined record scope in Salesforce, run the archive workflow on your container, and retain the resulting data in the selected database.
- Make record selection explicit: object or table, fields, date and status filters, related records, and attachments. Keep exclusions in the same configuration record.
- Review retained-data access separately from source sharing and field permissions. Define who can browse, export, or use archived data through an agent.
- Treat source cleanup as a separate approved operation. Validate the retained copy, dependencies, retention requirements, and recovery procedure before authorizing deletion.
Use the installation package and version-specific configuration supplied for your deployment. This guide covers the source, host, database, and workflow decisions that remain consistent across package versions.
Before you begin
Bring the application owner, infrastructure owner, and data owner into the same deployment review. Agree the boundaries before configuring a connection.
Decisions to make together
- Which records are inactive, and what makes them eligible for archiving?
- Which related records and attachments must remain available together?
- Who sets retention periods, handles holds, and authorizes source deletion?
- A named Salesforce administrator and an approved organization for the initial deployment.
- An inventory of standard and custom objects, relationship fields, and required files.
- A connection identity with the least access needed for the agreed task.
- An API usage budget and a plan for validating source automation during any write test.
Prepare Salesforce
Use a Salesforce sandbox or an approved test scope first. Inventory the objects, fields, and relationships that make up the business record.
Object visibility
Compare the connection account's visible objects and fields with the approved scope. Include custom objects and fields in the sample instead of validating only standard records.
Record relationships
Map parent and child records, reference identifiers, and files. For a recovery test, review required fields, validation rules, and automation that can affect inserted or updated records.
Inspect a small Salesforce record set
In an authenticated Salesforce REST client, use the API version supported by your org and deployment. Describe Case first to review the available fields and relationships, then send this bounded query. The paths below are source API requests, not Vivly endpoints.
HTTP
GET /services/data/vXX.X/sobjects/Case/describe/
GET /services/data/vXX.X/query/?q=SELECT+Id,CaseNumber,Status,AccountId,LastModifiedDate+FROM+Case+ORDER+BY+Id+LIMIT+10What to verify
Compare the returned IDs and fields with the same user's Salesforce view. For larger extracts, follow nextRecordsUrl until done is true; the first response is not necessarily the complete result. Describe output helps establish the field and relationship inventory, not a full backup of org metadata.
Salesforce: query results and paginationPrepare Docker
Prepare a container deployment with explicit network boundaries, persistent storage, and a controlled image version.
Image and configuration
Use the image reference and configuration supplied with your deployment package. Pin the agreed version and keep credentials in your approved secret mechanism rather than the image or source control.
Container networking
Map the routes to the source system and database. A database hostname reachable from the host is not necessarily reachable from a container; validate the route from the deployment network.
State and lifecycle
Identify every persistent volume and its owner. Plan resource limits, logs, restart behavior, and upgrades. Replacing a container must not silently discard the retained data or operating history.
Check the supplied Compose deployment
From the directory containing your approved Compose file, inspect the declared service names and running containers. Replace SERVICE_NAME with an actual name from the first command. These commands do not create or remove containers or volumes.
Shell
docker compose config --services
docker compose ps --all
docker compose logs --tail=50 SERVICE_NAMEWhat to verify
Check for restart loops or connection errors. Confirm that database files, attachments, and application state use the persistent mounts defined by the package. Docker volumes outlive individual containers, but volume deletion still removes that data; a volume is not a backup. Redact secrets and customer data before sharing logs.
Docker: volume persistence and lifecyclePrepare MySQL
Prepare a MySQL destination with a dedicated application database, a scoped connection identity, and an approved authentication method.
Compatibility and connection
Record the server version, driver, authentication plugin, and TLS configuration. Validate the connection from the application host using the connection identity that will run the workflow.
Types and encoding
Include non-ASCII text, nulls, precise numbers, long text, and date values in the validation dataset. Review character set, collation, and SQL mode when comparing source values with the stored result.
Capacity and ownership
Agree the account's schema privileges and the owner of database backups and maintenance. Measure storage growth during the first run and document restart and reconnect behavior.
Check the MySQL connection context
Run these read-only statements after selecting the intended database with the application identity. Inspect character encoding and SQL mode before comparing text and date values.
SQL
SELECT DATABASE() AS database_name,
CURRENT_USER() AS authenticated_account,
VERSION() AS server_version;
SELECT @@character_set_database, @@collation_database, @@sql_mode;
SHOW SESSION STATUS LIKE 'Ssl_cipher';What to verify
Confirm the database and authenticated account. A remote TLS connection should report a cipher. With the MySQL command-line client, --ssl-mode=VERIFY_IDENTITY and the appropriate CA verify the hostname as well as the certificate; a cipher by itself does not prove those checks ran.
MySQL: connection and TLS verification optionsConfigure the workflow
Start with a representative dataset, then expand the scope after validation. Use the connection settings established above and keep source changes behind the appropriate approval.
Create a policy
Open Create policy and define the Salesforce object scope and selection criteria. Start with a small group of closed or inactive records. Include required fields, relationships, and files in the configuration record, along with any exclusions.
Preview the selected records
Choose Preview records and compare the selection with the intended business rule. Check date boundaries, active records, missing values, and related records before running the archive workflow.
Validate the retained copy
Compare record counts and sampled field values with the source. Exercise the retrieval workflow that the business will actually use. Include a user who should have access and one who should not.
Make cleanup a separate decision
Do not use a completed transfer as proof that source records can be removed. Approve a cleanup policy only after retention, dependencies, retrieval, and recovery requirements have been reviewed.
Pilot: retrieve a closed case with its context
Choose a small, explicitly approved set of closed cases. Record their IDs, account relationships, required activity, and files before capture. Keep active cases and held records outside the selection.
- Preview the policy and reconcile its selected IDs with the agreed sample.
- Run capture, then compare the retained fields, parent relationships, and files with the source.
- Ask an archive user to find a known case and open its required context through the intended viewer.
- Test an archive user who must not see this history, using the archive's own access policy.
Scope of this example
Complete this pilot without source deletion. Reclamation requires its own verified eligibility, approval, and maintained write freeze. Live Salesforce sharing is not automatically replayed by the archive viewer.
Validate before expanding
- The selection rule includes the intended records and excludes held or active records.
- Source identifiers and required relationships can be traced in the retained data.
- A business user can retrieve an agreed historical case using the intended access path.
- Retention, source cleanup, and recovery responsibilities have named owners.
Keep a deployment record
Record the package version, environment, data scope, test date, expected result, actual result, and owner of each unresolved issue. Keep secrets and customer data out of shared support notes.
Everyday operations
After each run
Review completion status, record counts, failures, and source API usage. Resolve unexpected differences before allowing the next dependent action.
When credentials change
Update the connection through the approved secret process, verify a bounded read, and retest the required operations. Remove obsolete credentials.
When the source changes
Review added or changed objects, fields, access rules, and automation. Repeat representative data and permission checks before expanding the scope.
Before an upgrade
Record the current package and configuration, protect persistent data, and define the rollback procedure. Validate connectivity and a representative workflow after the change.
Troubleshooting
The archive contains fewer records than expected
Compare the selection rule, source account visibility, date boundaries, API responses, and excluded record types. Reconcile counts before changing the scope.
A historical record lacks useful context
Check whether related records, custom fields, and attachments were included. Test retrieval across the complete business case rather than a single row.
A record should not be removed
Stop the cleanup step and review active dependencies, retention holds, and the approved deletion boundary with the data owner.
MySQL values differ from the source
Compare encoding, collation, numeric and timestamp types, and SQL mode. Use a representative sample and inspect failed or truncated writes before expanding the dataset.
Technical references
Use these official references for the source APIs, database connection settings, and runtime behavior discussed above. They describe the underlying platforms; use your Vivly package documentation for its installation and supported configuration.
Review this deployment with Vivly
Bring your source scope, host, database, and success criteria. We will use them to identify the applicable package, open questions, and rollout sequence.
Book a demo