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 ignore it when migrating data.

Terminal window
%LocalAppData%\Memospot
Terminal window
$Env:LocalAppData\Memospot
Terminal window
~/.memos
Terminal window
/root/.memos
  1. Close Memospot and/or stop the Memos Docker container.

  2. Copy your assets folder from source to the destination data directory.

  3. Copy memos_prod.db to the destination data directory.

  4. That’s it! Start Memospot or the Memos container on the destination.

Valid up to Memos v0.18.1. Superseded on Memos v0.18.2+.

  • 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.

  1. A SQLite3 client, like DB Browser for SQLite.
  2. SSH access to your Docker host, if applicable.
  3. An SCP/SFTP client, like WinSCP and Cyberduck: to copy files to/from host, if needed.
  1. Close Memospot and stop your Docker container.

  2. Copy your assets folder from source to destination host.

  3. Copy the database files to a work directory on your local machine:

  4. Open the copied memos_prod.db with your SQLite client.

  5. Execute the appropriate SQL queries.

  6. Write the changes to the database and close it.

  7. Copy the modified memos_prod.db file to the destination.

The following queries assume the following:

  1. You are using the default internal Docker volume path /var/opt/memos.
  2. All your relative paths are using the default assets folder.

If any of these assumptions do not hold for your setup, you must adjust the queries.

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

Pick one path style and click to expand:

Using absolute paths (up to Memos v0.18.0)

Getting the absolute Memospot data path:

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,
'\',
'/'
);
Using relative paths (starting from Memos v0.18.1)

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;