使用 MySQL 和 meilisync 同步数据库
尽管 Meilisearch 是一个数据库,但我们不建议将其用作主数据存储。相反,您应该使用外部数据库存储数据并定期将其与 Meilisearch 同步。
本指南将教您如何使用 meilisync
使 Meilisearch 与 MySQL 数据库保持同步。请注意,meilisync 尚处于早期开发阶段,现在不适于投产。在与它进行交互时,您可能会遇到问题。
要求
- 命令行控制台,例如 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 密钥。将 `MEILISEARCH_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 # assuming your MySQL server is running on the same machine as `meilisync`
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 # Read the "Primary key inference" section below
full: true
- table: MYSQL_TABLE_NAME_2
index: MEILISEARCH_INDEX_NAME_2
full: true
将 MYSQL_TABLE_NAME_1
和 MEILISEARCH_INDEX_NAME_1
替换为您的表和索引的名称。正如上面的示例所示,您可以同步多个表。
主键推断
如果你的表中有多个带有 id
名称的列,meilisync
将无法推断哪个列是主键。在这种情况下,你必须通过将 pk
字段添加到表的配置中以手动指定主键。
自定义 `meilisync`
本教程描述了一个相当基本的 meilisync
设置。有关更多自定义选项,请参阅 meilisync
文档.
运行 `meilisync`
完成配置后,再次打开命令提示符并使用 Docker 或手动安装运行 meilisync
docker compose up
meilisync
应立即开始将你的主 MySQL 数据库与你的 Meilisearch 实例同步。
完成 meilisync
后,使用 Meilisearch 的搜索预览进行一些测试搜索,并确认数据已在你的主数据库和 Meilisearch 之间成功同步。
结论
恭喜你已成功设置 meilisync
。
你可以长期在后台运行该进程,以便主数据库的所有更改都能自动同步,或者你可以中断该进程,只在你再次更新数据库时才运行它。