mysql表复制方案

1. 逻辑复制:mysqldump 方法

mysqldump 将数据导出为一组 INSERT 语句,这是最常用的逻辑迁移方式 。

操作步骤

  1. 导出数据
bash 复制代码
mysqldump -h$host -u$user --single-transaction --add-locks=0 --no-create-info --set-gtid-purged=OFF db1 t --where="a>900" --result-file=t.sql
  • --single-transaction:导出时不加表锁,利用事务保证数据一致 。
  • --add-locks=0:生成的 SQL 不包含 LOCK TABLES 语句 。
  1. 导入数据
sql 复制代码
mysql -h$host -u$user db2 -e "source t.sql"
  • source 命令会读取文件并逐条执行 INSERT 语句 。

优缺点

  • 优点 :支持 WHERE 过滤(如只导出 a>900 的行),操作简单 。
  • 缺点:生成的 SQL 文件较大,导入速度相对较慢 。

2. 逻辑复制:CSV 文件导出导入

相比 mysqldump,直接操作 CSV 文件(SELECT INTO OUTFILE + LOAD DATA)效率更高,且支持所有 SQL 过滤写法 。

操作步骤

  1. 导出 CSV
sql 复制代码
SELECT * FROM db1.t WHERE a > 900 INTO OUTFILE '/tmp/t.csv';
  • 限制 :文件生成在 MySQL 服务端 。路径必须符合 secure_file_priv 参数的限制,且不能覆盖已有文件 。
  1. 导入数据
sql 复制代码
LOAD DATA INFILE '/tmp/t.csv' INTO TABLE db2.t;
  • 主备同步 :在 binlog_format=statement 时,主库会将 CSV 内容写进 binlog。备库接收后先写入本地临时目录,再执行 LOAD DATA LOCAL 导入,以保证主备数据一致 。

优缺点

  • 优点 :最灵活(支持复杂 SQL),速度比 mysqldump 快 。
  • 缺点 :每次只能导出一张表,且表结构需要单独用 SHOW CREATE TABLE 导出 。

3. 物理复制:传输表空间(Transportable Tablespace)

对于 TB 级别的大表,物理拷贝 .ibd 数据文件是 速度最快 的方案 。

核心术语

  • .ibd:InnoDB 的数据文件 。
  • .cfg:导出的描述文件(Metadata),用于在导入时让目标库识别拷贝的数据 。

操作流程(以将 t 拷贝到 r 为例)

  1. 准备环境 :创建同结构空表 CREATE TABLE r LIKE t;
  2. 移除旧空间ALTER TABLE r DISCARD TABLESPACE;(删除 r.ibd) 。
  3. 导出源表FLUSH TABLE t FOR EXPORT;(源表 t 变为只读,并生成 t.cfg) 。
  4. 搬运文件 :在操作系统层面执行 cp t.cfg r.cfg; cp t.ibd r.ibd;(需注意 MySQL 进程的读写权限) 。
  5. 释放源表UNLOCK TABLES;(删除临时的 t.cfg) 。
  6. 导入空间ALTER TABLE r IMPORT TABLESPACE;(MySQL 会修改文件中的表空间 ID 以匹配目标库) 。

优缺点

  • 优点:恢复速度最快,适合全表拷贝或从误删备份中恢复数据 。
  • 缺点必须全表拷贝,无法过滤数据;需要有服务器操作系统的权限;仅限 InnoDB 引擎 。
相关推荐
念越8 分钟前
【数据库系统概论期末复习】第四章 数据库安全性重点与常考题整理
数据库·数据库系统概论
拾贰_C39 分钟前
【mysql | windows | installation】 MySQL5.安装
数据库·windows·mysql
睡不醒男孩0308231 小时前
达梦数据安装详细步骤(包含CLup一键部署达梦数据库实例)
数据库·达梦·clup
真实的菜1 小时前
【无标题】Redis 从入门到精通(七):缓存设计与最佳实践 —— 穿透、击穿、雪崩与一致性终极指南
数据库·redis·缓存
念何架构之路1 小时前
存储技术Redis
数据库·redis·缓存
淘源码d1 小时前
医院专业级PACS系统完整源码(C+VC+MSSQL)
c语言·数据库·sqlserver·源码·pacs系统·医学影像系统
wu8587734571 小时前
向量数据库不是银弹:从枚举漏检到 ReACT 多轮召回的实践路径
前端·数据库·react.js
hsg772 小时前
简述:Jensen Huang‘s Footsteps网站全内容分析
前端·javascript·数据库
yuezhilangniao2 小时前
MySQL 8.0.32 二进制安装脚本 和初始化 操作系统版本rocky86
数据库·mysql·adb
Trouvaille ~2 小时前
【Redis篇】Redis 主从复制:数据同步的原理与实现
数据库·redis·缓存·中间件·高可用·主从复制·后端开发