Skip to content

Data migration

Assets, attachments, resources, and objects are interchangeable terms that refer to the same thing: uploaded files.

The .thumbnail_cache directory and its contents are generated as needed. You may skip it when migrating data.

Terminal window
%LocalAppData%\Memospot
Terminal window
$Env:LocalAppData\Memospot
Terminal window
~/.memos
Terminal window
/root/.memos
  • Close Memospot and/or stop the Memos Docker container
  • Copy your assets folder from source to the destination data directory
  • Copy memos_prod.db (with the sidecar journal files, if they exist) to the destination data directory

Migrating data from earlier Memos versions

Section titled “Migrating data from earlier Memos versions”
  • Up to Memos v0.18.1, databases and assets were not portable. They pointed to absolute paths at the host’s file system, and moving data between systems required the instructions written on this page.
  • Memos v0.18.2 started saving new assets with relative paths, but shipped a very slow path migrator for pre-existing assets.
  • The asset path migrator was removed from Memos v0.19.1+.
  • Memospot v0.1.3/v0.1.4 (bundled with Memos v0.20.0, compatible up to v0.21.0) shipped with its own fast asset migrator.

This guide will help you migrate your Memos database and assets to a new host.

It’s possible to migrate between Windows and POSIX hosts, and between Memos Docker and Memospot, in any combination or direction. Just follow the appropriate steps.

If you only used the default Database object storage, you can skip the assets migration part and just copy the database files to the new host.

  • Close Memospot and stop your Docker container
  • Copy your assets folder from source to destination host
  • Copy memos_prod.db (and sidecar files memos_prod.db-shm and memos_prod.db-wal, if they exist) to a work directory on your local machine
  • Open the copied memos_prod.db with your SQLite client
  • Execute the appropriate SQL queries
  • Write the changes to the database and close it
  • Copy the modified memos_prod.db file to the destination

The following queries assume the following:

  • You are using the default internal Docker volume path /var/opt/memos

  • All your relative paths are using the default assets folder

The following sections contains queries to replace the assets paths in the database.

Pick one path style:

Terminal window
echo "$HOME/.memospot"

Choose what best suits your migration scenario, then copy and adjust the SQL query:

-- Replace Windows paths with default internal Docker paths
UPDATE resource
SET internal_path = REPLACE(internal_path,
'__MEMOS_DATA_WINDOWS__',
'/var/opt/memos');
-- Replace remaining Windows path separators
UPDATE resource
SET internal_path = REPLACE(internal_path, '\', '/');

These queries will replace absolute paths with relative paths.

Choose what best suits your scenario:

UPDATE resource
SET internal_path = REPLACE(internal_path,
SUBSTR(internal_path, 1,
INSTR(internal_path, '/assets')
), '');

Execute the following query to check the first 100 rows:

SELECT type, filename, internal_path
FROM resource WHERE internal_path IS NOT '' LIMIT 100;