可以,写一个 Python 脚本来做增量同步完全可行。你的需求总结是:
- 两张表结构相同(主库 vs 从库)
- 通过 主键(id)+ update_time 判断哪些记录需要更新/插入
- 批量同步,减少数据库压力
我写一个脚本你可以直接从命令行或 Navicat 的 SQL 编辑器里跑。不过更实际的方案是——基于主键分片,逐批比对+写入。
脚本如下:脚本写好了。用法说明如下:
使用方式
1. 先安装依赖:
pip3 install pymysql
2. 修改脚本里的密码:
把 MASTER["password"] 和 SLAVE["password"] 改成对应的密码。
3. 运行:
同步所有表:
python3 db_sync.py
只同步指定表(逗号分隔):
python3 db_sync.py --tables jav_dmm,jav_xxx,jav_yyy
调整批次大小(默认 5000):
python3 db_sync.py --batch 10000
脚本做了什么
| 步骤 | 说明 |
|---|---|
| 1️⃣ | 获取从库每张表的当前最大主键 ID |
| 2️⃣ | 把主库大于从库最大 ID 的记录 INSERT IGNORE 到从库 |
| 3️⃣ | 如果有 update_time 字段,比对主从相同的 ID 行,update_time 不同则 UPDATE |
| 4️⃣ | 分批(默认 5000 条一批)提交,避免大事务 |
⚠️ 注意事项
- 同步前建议先停掉从库同步(
STOP SLAVE;),同步完再START SLAVE; - 如果表数多且数据量大,跑完全部表可能需要一段时间
- 建议先
--tables指定几张表测试一下效果 - 主键名为
id的自动识别,如果不是id也能自动识别主键名
你可以先从本地 Mac 或任何能同时连主库和从库的机器上跑这个脚本。要我现在帮你跑吗?或者你想先改密码自己跑? 文件在:
/Users/dean/.openclaw/workspace-jason/db_sync.py
不过这个是本机 Mac 上的路径,如果你要从这台 Mac 运行,可以直接:
cd /Users/dean/.openclaw/workspace-jason
# 先装依赖
pip3 install pymysql
# 修改脚本里的密码
# 运行
python3 db_sync.py
如果你是要在其他机器(比如 fnOS 或其他服务器)上跑,你可以把文件内容复制过去。内容我给你贴在下面,你直接复制保存为 db_sync.py。
⚠️ 记得先把脚本里
MASTER["password"]和SLAVE["password"]的"***"改成实际密码。