字节笔记本字节笔记本

使用 MySQL 和 meilisync 同步数据库的指南

2024-06-11

本指南详细介绍了如何使用meilisync工具将MySQL数据库与Meilisearch实例同步,包括安装meilisync、配置连接、设置MySQL二进制日志格式以及运行同步过程。

使用 MySQL 和 meilisync 同步数据库的指南

尽管 Meilisearch 是一个数据库,但不建议将其用作主要数据存储。相反,应该使用外部数据库来存储数据,并定期与 Meilisearch 同步。本指南教您如何使用 meilisync 将 Meilisearch 与 MySQL 数据库保持同步。

要求

  • 一个命令行控制台,例如 macOS 的终端或 Windows 的 Cygwin
  • 一个已填充数据的 MySQL 数据库
  • 一个 Meilisearch 实例,可以通过 Meilisearch Cloud 管理或自行托管

安装 meilisync

将 meilisync 安装到与您的主数据库相同的位置。可以手动安装或使用 Docker:

Docker 安装

首先,在 Docker 项目目录中创建一个 docker-compose.yml 文件。用文本编辑器打开它,并添加以下内容:

services:
  meilisync:
    platform: linux/x86_64
    image: long2ice/meilisync
    volumes:
      - ./config.yml:/meilisync/config.yml

如果您的项目已经有一个 docker-compose.yml 文件,请将 meilisync 的设置添加到现有的 services 字段中。

完成后,打开控制台,导航到 Docker 项目目录,并运行以下命令:

docker compose pull

几秒钟后,Docker 会通知您已成功拉取 meilisync 的镜像。

连接 meilisync 到 Meilisearch

安装 meilisync 后,需要将其连接到 Meilisearch 实例。

在项目目录中创建一个 config.yml 文件。用文本编辑器打开它,并根据是否使用 Docker 添加以下配置选项:

meilisearch:
  api_url: http://host.docker.internal:7700/
  api_key: 'MEILISEARCH_API_KEY'
  insert_size: 1000
  insert_interval: 10

MEILISEARCH_API_KEY 替换为能够创建、更新和删除文档和索引的 API 密钥。将 api_url 替换为实例的 API URL。如果使用 Meilisearch Cloud,此 URL 应类似于 https://ms-4d85L33tC0d3-5041.fra.meilisearch.io

配置 MySQL

连接 meilisync 到 Meilisearch 后,需要将其连接到 MySQL 数据库。

二进制日志格式

要使用 meilisync 与 MySQL,必须将二进制日志格式设置为 ROW。

使用 --binlog-format 命令行选项启动 MySQL 服务器:

mysql --binlog-format=ROW

或者,在运行时通过 MySQL 服务器控制台运行以下命令设置二进制日志格式:

SET GLOBAL binlog_format = 'ROW';

连接 meilisync 和 MySQL

再次打开 meilisyncconfig.yml 文件,并在文件底部添加以下设置:

source:
  type: mysql
  host: 127.0.0.1
  port: 3306
  database: MYSQL_DATABASE_NAME
  user: MYSQL_USERNAME
  password: MYSQL_PASSWORD

MYSQL_DATABASE_NAMEMYSQL_USERNAMEMYSQL_PASSWORD 替换为数据库名称、具有该数据库读访问权限的用户及其凭据。

配置 meilisync

最后一步是指定数据库中的哪些表应同步到哪些 Meilisearch 索引。

打开 config.yml 并在文件底部添加以下设置:

sync:
  - table: MYSQL_TABLE_NAME_1
    index: MEILISEARCH_INDEX_NAME_1
    pk: id
    full: true
  - table: MYSQL_TABLE_NAME_2
    index: MEILISEARCH_INDEX_NAME_2
    full: true

MYSQL_TABLE_NAME_1MEILISEARCH_INDEX_NAME_1 替换为表和索引的名称。可以同步多个表。

运行 meilisync

配置完成后,再次打开命令行提示符,并使用 Docker 或手动安装运行 meilisync:

docker compose up

meilisync 应立即开始将主 MySQL 数据库与 Meilisearch 实例同步。

结论

您已成功设置 meilisync。可以将该进程永久在后台运行,以便所有对主数据库的更改都能自动同步,或者在再次更新数据库时手动运行该进程。