使用 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
再次打开 meilisync
的 config.yml
文件,并在文件底部添加以下设置:
source: type: mysql host: 127.0.0.1 port: 3306 database: MYSQL_DATABASE_NAME user: MYSQL_USERNAME password: MYSQL_PASSWORD
将 MYSQL_DATABASE_NAME
、MYSQL_USERNAME
和 MYSQL_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_1
和 MEILISEARCH_INDEX_NAME_1
替换为表和索引的名称。可以同步多个表。
运行 meilisync
配置完成后,再次打开命令行提示符,并使用 Docker 或手动安装运行 meilisync:
docker compose up
meilisync
应立即开始将主 MySQL 数据库与 Meilisearch 实例同步。
结论
您已成功设置 meilisync
。可以将该进程永久在后台运行,以便所有对主数据库的更改都能自动同步,或者在再次更新数据库时手动运行该进程。