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 引擎 。
相关推荐
zcn12615 分钟前
不同列or运算优化经验
数据库·sql优化改写
大梦想家a1 小时前
基于 Spring Boot 的物流运单管理系统后端设计与实现(JWT + MyBatis-Plus + MySQL)
spring boot·mysql·mybatis
ZYJCSZKJ2 小时前
基于地理位置围栏的短视频POI团购系统:LBS空间索引与流量分发实践
java·服务器·数据库
Mr.朱鹏10 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
摇滚侠10 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng110 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
云贝贝贝11 小时前
腾讯云 TDSQL(MySQL 版)运维高频 6 坑:代理路由、读写分离、分片键、监控、PITR
运维·mysql·腾讯云
wxwx_bscxy32211 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向12 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却13 小时前
数据库基础:DQL 数据查询语言
数据库·oracle