mysqldump忽略指定表导出导入是否保留目标库已有表及同步方案咨询
命令可行性验证
第一步命令
你给出的第一条命令完全可以实现预期效果:
--no-create-db参数会跳过生成CREATE DATABASE语句,不会修改/重建目标端已有的db1库--ignore-table=db1.big_table参数会完全排除big_table的结构、数据导出逻辑,导入过程中不会对目标端的big_table做任何操作- 默认mysqldump导出表结构时会自带
DROP TABLE IF EXISTS+CREATE TABLE逻辑,除big_table外的其余表都会按源端结构重建,符合你的需求。
注意:该操作会清空目标端除
big_table外所有表的现有数据,和你的需求一致。
第二步命令
第二条命令也可以完成增量导入需求:
--no-create-info参数会跳过表结构导出,不会触发big_table的删除/重建操作--where条件会筛选出指定时间戳之后的新增记录,你已确认该时间段内只有新增无更新,导出的INSERT语句直接导入目标端不会冲突,也不会修改big_table的现有数据
稳妥起见可以额外加
--insert-ignore参数,避免偶发的主键/唯一键冲突导致导入中断。
更优实现方案
根据你的场景可以选择以下优化方案:
- 基础优化:给mysqldump加
--single-transaction --quick参数,针对InnoDB引擎可以做到源端无锁备份,不影响业务正常读写;导出导入链路加压缩逻辑,减少网络传输耗时,示例:mysqldump -h host1 db1 --ignore-table=db1.big_table --no-create-db --single-transaction --quick | gzip | mysql -h host2 db1 - 零误差增量同步:如果业务持续写入,时间戳截取容易出现数据误差,建议用binlog同步工具(比如Canal、Maxwell)订阅源端binlog,增量同步所有写入操作,不需要手动维护时间戳,也支持断点续传,切库前可以做到两端数据完全一致,停机时间可缩短到秒级。
- 大表快速同步:如果
big_table后续还有增量同步需求,可以用pt-archiver等工具批量导增量,相比mysqldump性能更高,还能控制导数据的速度,避免打爆服务器IO。
内容的提问来源于stack exchange,提问作者Streamline
相关产品推荐
相关产品推荐

