如何从本地MySQL数据库向远程MySQL服务器插入/替换数据
从本地MySQL向远程MySQL复制指定时间范围的数据
你的核心问题是当前命令连接的是远程服务器,导致SELECT操作读取的是远程的pswx_raccar库,而非本地数据源。以下是两种可行的解决方案:
方法1:用mysqldump+管道直接传输(推荐)
这个方式直接从本地导出符合条件的数据,通过管道实时导入到远程数据库,无需生成中间文件。
# 替换[本地用户名]和[本地密码]为你的本地MySQL账号信息 mysqldump -u [本地用户名] -p[本地密码] pswx_raccar positions_1906 --where="device_time BETWEEN '2023-06-11 00:00:00' AND '2023-07-01 23:59:00'" --replace | mysql -h 161.x.x.x -u repair -p5ThNqHdyRwC repair_raccar
--replace参数会让导入时自动替换主键/唯一键冲突的数据,和你要的REPLACE效果一致- 若想更安全地输入本地MySQL密码,可去掉
-p[本地密码],执行时会提示手动输入
方法2:本地MySQL跨服务器执行REPLACE
如果本地MySQL能直接连接远程服务器,可通过创建FEDERATED表映射远程目标表,再执行REPLACE操作:
- 先在本地创建远程目标表的映射(表结构必须和远程完全一致):
CREATE TABLE repair_raccar.positions_1906 ( -- 复制远程repair_raccar.positions_1906的完整CREATE TABLE语句内容 ) ENGINE=FEDERATED CONNECTION='mysql://repair:5ThNqHdyRwC@161.x.x.x/repair_raccar/positions_1906';
- 在本地MySQL客户端执行REPLACE语句:
REPLACE INTO repair_raccar.positions_1906 SELECT * FROM pswx_raccar.positions_1906 WHERE device_time BETWEEN '2023-06-11 00:00:00' AND '2023-07-01 23:59:00';
额外提示
- 若远程MySQL端口非默认3306,需在
mysql命令后加-P [端口号]参数 - 大数据量传输时,可添加
--compress参数到mysqldump和mysql,减少网络带宽占用 - 执行前可给
mysqldump加--dry-run参数,预览导出内容,避免误操作
内容的提问来源于stack exchange,提问作者Hrishi m
相关产品推荐
相关产品推荐

