【解决方案 二十七】如何安全稳定的Dump线上数据

简介: 【解决方案 二十七】如何安全稳定的Dump线上数据

有时候出于线上真实数据模拟的需求,我们需要整库把线上的数据拉到测试环境进行测试,这就涉及到整库的导入和导出问题,有这么几个问题需要处理:

  1. 导出的语句和文件不能是一个,否则如果线上数据几千万级别的情况下,会导致超时或者来自DBA的问候,所以最好一个表一个文件,一个表的话哪怕百万级也不算太慢
  2. 导入的语句最好是一个,或者支持批量选中文件导入,否则一个一个导太慢了

我的实际情况是,线上有100多张表,总共大概11.5GB,数据量在2000万级别。于是调研了下方法,发现:

  1. 对于导出而言:DateGrip支持整库Dump和批量导出所有表,Navicat支持整库Dump,但不支持批量导出所有表
  2. 对于导入而言:DateGrip支持批量导入所有表,但是速度非常慢,平均1分钟2000条,Navicat非常快,但是不支持批量导入

所以我决定分别使用这两个工具进行处理,导出用DateGrip,导入用Navicat。以下为自己的数据示例

1 通过DateGrip导出

选中指定库,并右键选中导出数据到文件:

设置导出选项:

执行导入即可

2 sql文件合成为一个

由于Navicat不支持批量执行sql语句,所以我们需要把导出的文件merge为一个大的sql文件,进入到导出目录下:

使用如下命令进行文件合成:

  • windows电脑:copy *.sql merge.sql
  • mac电脑:cat *.sql > merge.sql

以windows为例我们在目录下调出cmd

打开该文件可以看到是全量的sql:

create table bank_account
(
    id           int         not null
        primary key,
    bank_name    varchar(50) not null,
    account_name varchar(50) not null,
    person_id    int         not null,
    remark       tinytext    null,
    constraint bank_account_id_uindex
        unique (id)
);
INSERT INTO test.bank_account (id, bank_name, account_name, person_id, remark) VALUES (1, '农业银行', 'tml_农业', 1, null);
INSERT INTO test.bank_account (id, bank_name, account_name, person_id, remark) VALUES (2, '中国银行', 'tml_中国', 1, null);
INSERT INTO test.bank_account (id, bank_name, account_name, person_id, remark) VALUES (3, '北京银行', 'tml_北京', 1, null);
INSERT INTO test.bank_account (id, bank_name, account_name, person_id, remark) VALUES (4, '华夏银行', 'gcy_华夏', 2, null);
INSERT INTO test.bank_account (id, bank_name, account_name, person_id, remark) VALUES (5, '北京银行', 'gcy_北京', 2, null);
create table person
(
    id       int         not null
        primary key,
    username varchar(50) not null,
    password varchar(50) not null,
    age      int         not null,
    phone    int         not null,
    email    varchar(50) not null,
    hobby    varchar(50) not null,
    remark   tinytext    null
);
create index username__index
    on person (username);
INSERT INTO test.person (id, username, password, age, phone, email, hobby, remark) VALUES (0, 'mhw', '343444', 22, 1983499834, '123234@qq.com', '跳远', null);
INSERT INTO test.person (id, username, password, age, phone, email, hobby, remark) VALUES (1, 'tml', '123456', 30, 1234566454, '434355@qq.com', '篮球', null);
INSERT INTO test.person (id, username, password, age, phone, email, hobby, remark) VALUES (2, 'gcy', '111111', 30, 1234555555, '155555@qq.com', '足球', null);
INSERT INTO test.person (id, username, password, age, phone, email, hobby, remark) VALUES (4, 'wcong', '111111', 30, 11111111, '111111@qq.com', '跳远', null);
INSERT INTO test.person (id, username, password, age, phone, email, hobby, remark) VALUES (7, 'aaaa', '111111', 30, 11111111, '111111@qq.com', '跳远', null);
INSERT INTO test.person (id, username, password, age, phone, email, hobby, remark) VALUES (9, 'tmlnew', '12345565', 23, 18810578, '133044@qq.com', '足球', null);
INSERT INTO test.person (id, username, password, age, phone, email, hobby, remark) VALUES (99, 'tml', '12345', 999, 112223, '12345@qq.com', '写代码', null);

3 通过Navicat导入

拿到拼接好的导出文件之后,我们就可以进行导入了,打开navicat,找到我们创建的test_prod库运行合并的sql文件:

运行结果如下:

相关文章
|
6月前
|
编译器 开发者 UED
"解锁hyengine编译性能新纪元:快路径优化技术揭秘,直击热点代码效率瓶颈,让你的应用飞起来!"
【8月更文挑战第21天】hyengine是一款现代化编程引擎,其编译性能直接影响应用质量。针对直接翻译opcode至机器码效率低下的问题,hyengine采用快路径优化策略,专注于热点代码的深度优化,以减少运行时开销。例如,通过循环展开技术减少控制指令开销,智能判断循环展开时机与程度。此外,还运用函数内联等技术进一步提升性能,如内联小函数以减少调用开销。未来将持续探索更多优化方案,提升用户体验,并欢迎开发者共同参与技术进步。
64 2
|
6月前
|
SQL 关系型数据库 MySQL
(十八)MySQL排查篇:该如何定位并解决线上突发的Bug与疑难杂症?
前面《MySQL优化篇》、《SQL优化篇》两章中,聊到了关于数据库性能优化的话题,而本文则再来聊一聊关于MySQL线上排查方面的话题。线上排查、性能优化等内容是面试过程中的“常客”,而对于线上遇到的“疑难杂症”,需要通过理性的思维去分析问题、排查问题、定位问题,最后再着手解决问题,同时,如果解决掉所遇到的问题或瓶颈后,也可以在能力范围之内尝试最优解以及适当考虑拓展性。
430 3
|
6月前
|
测试技术 编译器 持续交付
持续部署的内涵和实施路径问题之集成尽早进行每次集成很小的问题如何解决
持续部署的内涵和实施路径问题之集成尽早进行每次集成很小的问题如何解决
|
9月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
145 0
|
9月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
108 0
|
存储 NoSQL 算法
线上真实排队系统重构案例分享——实战篇
线上真实排队系统重构案例分享——实战篇
611 0
|
Web App开发 JavaScript 前端开发
国内第一篇讲如何减少卡顿的代码级别详细文章
国内第一篇讲如何减少卡顿的代码级别详细文章
187 0
国内第一篇讲如何减少卡顿的代码级别详细文章
|
人工智能 算法 搜索推荐
颠覆传统RPA的实在IPA模式,如何做到真正人人可用
为什么实在智能能够率先发布一款颠覆传统RPA的IPA模式产品?CEO孙林君告诉我们答案。
304 0
颠覆传统RPA的实在IPA模式,如何做到真正人人可用
|
运维 监控 数据可视化
不改一行代码定位线上性能问题
性能问题。 大致的现象是: 我们提供出去的一个 OpenAPI 反应时快时慢,快的时候几十毫秒,慢的时候几秒钟才响应。
|
Java API C++
项目与产品: 现象,问题及解决方案
现象,问题和解决方案--写于2009年
466 0