【解决方案 二十七】如何安全稳定的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文件:

运行结果如下:

相关文章
|
4月前
|
JavaScript 关系型数据库 MySQL
在线文档频繁故障不稳定,其实可以自己搭一个Etherpad在线文档
在线文档频繁故障不稳定,其实可以自己搭一个Etherpad在线文档
|
7月前
|
人工智能 运维 监控
在日常开发工作中,日志数据该如何利用?
在日常开发工作中,日志数据是一个宝贵的资源,它可以提供关于应用程序运行状态、错误报告、性能指标和用户行为等方面的重要信息。正确地利用和分析日志数据可以帮助开发人员更好地理解应用程序的运行情况,快速定位和解决问题,改进应用程序的性能,并为业务决策提供有力支持。尤其是在现代科技发展的背景下,日志数据作为一种重要的信息资源,对于运维工作具有极大的价值。然而,如何充分利用日志数据,并将其应用于运维和开发工作中,仍然是许多企业和运维和开发人员关注的问题。那么本文就来分享一下在日常开发中关于日志数据的利用方面的探讨。
130 1
在日常开发工作中,日志数据该如何利用?
|
7月前
|
存储 测试技术 虚拟化
现代化数据体验(1)-C40的一次性能测试记录
现代化数据体验(1)-C40的一次性能测试记录
现代化数据体验(1)-C40的一次性能测试记录
|
10月前
|
XML 缓存 前端开发
【解决方案 十一】问题排查方法的思考
【解决方案 十一】问题排查方法的思考
80 0
|
安全 数据可视化 Java
Jmix - 业务系统高效开发的少代码平台
少代码具有低代码产品的所有优点,但是又没有任何低代码产品的缺点。[Jmix.cn ](https://www.jmix.cn/)从定位、产品设计方面把低代码平台的缺陷都抹平并且提升为优点。我们称它为 “少代码”。
413 2
Jmix - 业务系统高效开发的少代码平台
|
SQL 运维 测试技术
卓越项目【商城版本】完整实施过程(持续更新,最终为VIP版本)
卓越项目【商城版本】完整实施过程(持续更新,最终为VIP版本)
82 0
|
安全 测试技术 Linux
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 1 【部署到服务器】
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 1 【部署到服务器】
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 1 【部署到服务器】
|
存储 安全 测试技术
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 2【gitlab到底咋配置】
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 2【gitlab到底咋配置】
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 2【gitlab到底咋配置】
|
运维 监控 数据可视化
不改一行代码定位线上性能问题
性能问题。 大致的现象是: 我们提供出去的一个 OpenAPI 反应时快时慢,快的时候几十毫秒,慢的时候几秒钟才响应。
|
Web App开发 监控 Kubernetes
日志调试不理想?试试分布式追踪优势
日志调试不理想?试试分布式追踪优势
154 0
日志调试不理想?试试分布式追踪优势