Skip to content

数据库驱动

Memos 支持下列数据库类型:

  • SQLite (默认支持)
  • MySQL (从 0.16.1 开始支持)
  • PostgreSQL (从 0.18.0 开始支持)

使用 MySQL

推荐使用 MySQL 8.0 或更高版本。默认的字符集和排序规则分别是 utf8mb4utf8mb4_unicode_ci

默认情况下,Memos 使用 SQLite 作为数据库驱动。要切换到 MySQL,你可以使用以下步骤:

  • --driver mysql : 这个参数指定 Memos 应该使用 mysql 驱动而不是默认的 sqlite
  • --dsn dbuser:dbpass@tcp(dbhost)/dbname : 提供你的 MySQL 服务的详细链接信息。

你可以使用如下命令来通过 Docker 启动 Memos:

shell
docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos neosmemo/memos:stable --driver mysql --dsn 'root:password@tcp(localhost)/memos_prod'

你也可以通过环境变量来设置这些值:

shell
MEMOS_DRIVER=mysql
MEMOS_DSN=root:password@tcp(localhost)/memos_prod

使用 PostgreSQL

从 0.18.0 开始,Memos 也支持使用 PostgreSQL 作为数据库驱动了。要切换到 PostgreSQL,你可以使用如下步骤:

  • --driver postgres : 这个参数指定 Memos 应该使用 postgres 驱动而不是默认的 sqlite
  • --dsn postgresql://postgres:PASSWORD@localhost:5432/memos : 提供你的 PostgreSQL 服务的详细链接信息。

你可以使用如下命令来通过 Docker 启动 Memos:

shell
docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos neosmemo/memos:stable --driver postgres --dsn 'postgresql://postgres:PASSWORD@localhost:5432/memos'

你也可以通过环境变量来设置这些值:

shell
MEMOS_DRIVER=postgres
MEMOS_DSN=postgresql://root:password@localhost:5432/memos

注意,如果 PostgreSQL 服务器未配置为支持 SSL 连接,则需要将 ?sslmode=disable 添加到 DSN。

你可以选择最适合你的数据库驱动,并为 Memos 进行对应的配置。

Docker Compose 示例

下面的 compose.yml 展示了使用 PostgreSQL 数据库来配置 Memos。

yml
version: "3.0"
services:
  memos:
    image: neosmemo/memos:stable
    restart: always
    depends_on:
      - db
    ports:
      - 5230:5230
    environment:
      - MEMOS_DRIVER=postgres
      - MEMOS_DSN=user=memos password=secret dbname=memosdb host=db sslmode=disable

  db:
    image: postgres:16.1
    restart: unless-stopped
    volumes:
      - "./database:/var/lib/postgresql/data/"
    environment:
      POSTGRES_USER: memos
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: memosdb

不同数据库驱动之间的数据迁移

你可以使用任意脚本来处理这件事,例如我让 ChatGPT 协助我来创建一个从 SQLite 迁移到 MySQL 的 Python 脚本:SQLite to MySQL Migration

类似地,你也使用同样的方法创建一个 SQLite 迁移到 PostgreSQL 的脚本

最后更新于: