mysql dump 导出表_[译文]MySQL中快速逻辑备份一张单独的表

2023-11-20

逻辑备份在跨云环境的数据迁移和表级恢复中非常有用。8.0.22的MySQL shell引入了两个新的实用程序util.dumpTable()util.exportTable(),用于从MySQL中导出单独的表。在8.0.22之前,无法使用MySQL Shell备份单个表。

使用MySQL Shell中新的表转储程序util.dumpTable(),我们可以获取schema下特定的表。它的工作方式与8.0.21中引入的实例转储实用程序utility util.dumpInstance()和schema转储实用工具util.dumpSchemas()相同,但是选择了不同的选项。然后,可以使用MySQL Shell的加载转储实用程序util.loadDump()将导出的文件导入到MySQL数据库服务DB系统(简称MySQL DB系统)或MySQL服务器实例中。

MySQL Shell的新表导出实用程序util.exportTable()在本地服务器中导出关系数据文件

使用util.dumpTables()可以更快地转储大表,与mysqldumpmydumpermysqlpump相比,它所花的时间更少。

使用util.dumpTables()转储

我们需要最新的8.0.22MySQL Shell。

在我们的用例中,我使用Sysbench在一张表中插入了一亿的数据,插入后的数据大小约为20G。

使用sysbench加载一千万的数据

[root@mydbopstest ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-port=3306 --mysql-user=root --mysql-password --mysql-socket=/data/mysql/mysql.sock --mysql-db=test1 --db-driver=mysql --tables=1 --table-size=100000000 prepare

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Creating table 'sbtest1'...

Inserting 100000000 records into 'sbtest1'

Creating a secondary index on 'sbtest1'...

[root@mydbopstest ~]#

第一步:使用Shell程序连接MySQL服务端

这个案例中我的数据库版本为MySQL5.7.30(Percona)。Shell程序兼容任意MySQL版本。

[root@mydbopstest ~]# mysqlsh root@localhost --socket=/data/mysql/mysql.sock

Please provide the password for 'root@/data%2Fmysql%2Fmysql.sock': **********

MySQL Shell 8.0.22

Copyright (c) 2016, 2020, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates.

Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.

Creating a session to 'root@/data%2Fmysql%2Fmysql.sock'

Fetching schema names for autocompletion... Press ^C to stop.

Your MySQL connection id is 2660844

Server version: 5.7.30-33-log Percona Server (GPL), Release 33, Revision 6517692

No default schema selected; type \use to set one.

MySQL localhost JS >

第二步:使用shell程序初始化单独表的备份

确保您使用JS模式连接shell程序。在备份时我们使用默认的4线程。

MySQL localhost JS > util.dumpTables("test1", [ "sbtest1" ], "/root/dump_table");

Acquiring global read lock

Global read lock acquired

All transactions have been started

Locking instance for backup

NOTE: Backup lock is not supported in MySQL 5.7 and DDL changes will not be blocked. The dump may fail with an error or not be completely consistent if schema changes are made while dumping.

Global read lock has been released

Writing global DDL files

Writing DDL for table `test1`.`sbtest1`

Preparing data dump for table `test1`.`sbtest1`

Data dump for table `test1`.`sbtest1` will be chunked using column `id`

Running data dump using 4 threads.

NOTE: Progress information uses estimated values and may not be accurate.

Data dump for table `test1`.`sbtest1` will be written to 788 files

1 thds dumping - 101% (100.00M rows / ~98.57M rows), 278.86K rows/s, 55.22 MB/s uncompressed, 24.63 MB/s compressed

Duration: 00:06:55s

Schemas dumped: 1

Tables dumped: 1

Uncompressed data size: 19.79 GB

Compressed data size: 8.83 GB

Compression ratio: 2.2

Rows written: 100000000

Bytes written: 8.83 GB

Average uncompressed throughput: 47.59 MB/s

Average compressed throughput: 21.23 MB/s

对一个20G的单表备份花费了大约7分钟(6:55)。备份存储在压缩的tsv文件中。

第三步:通过shell程序导入单独表备份

现在,我们通过util.loadDump()加载单独的表备份。我们使用4线程导入这些数据。

MySQL localhost JS > util.dumpTables("test1", [ "sbtest1" ], "/root/dump_table");

Acquiring global read lock

Global read lock acquired

All transactions have been started

Locking instance for backup

NOTE: Backup lock is not supported in MySQL 5.7 and DDL changes will not be blocked. The dump may fail with an error or not be completely consistent if schema changes are made while dumping.

Global read lock has been released

Writing global DDL files

Writing DDL for table `test1`.`sbtest1`

Preparing data dump for table `test1`.`sbtest1`

Data dump for table `test1`.`sbtest1` will be chunked using column `id`

Running data dump using 4 threads.

NOTE: Progress information uses estimated values and may not be accurate.

Data dump for table `test1`.`sbtest1` will be written to 788 files

1 thds dumping - 101% (100.00M rows / ~98.57M rows), 278.86K rows/s, 55.22 MB/s uncompressed, 24.63 MB/s compressed

Duration: 00:06:55s

Schemas dumped: 1

Tables dumped: 1

Uncompressed data size: 19.79 GB

Compressed data size: 8.83 GB

Compression ratio: 2.2

Rows written: 100000000

Bytes written: 8.83 GB

Average uncompressed throughput: 47.59 MB/s

Average compressed throughput: 21.23 MB/s

It took around 7 Min ( 6:55 ) to make a backup of single table of size 20GB. The backup are stored in the compressed tsv files.

Step 3: Load the single table backup via shell utility

Now let us load the single table data back via util.loadDump() utility. We have used the 4 threads to import these data.

MySQL localhost JS > util.loadDump("/root/dump_table",{schema:'test1'})

Loading DDL and Data from '/home/root/dump_table' using 4 threads.

Opening dump...

Target is MySQL 5.7.30-33-log. A dump was produced from MySQL 5.7.30-33-log

Checking for pre-existing objects...

Executing common preamble SQL

[Worker003] Executing DDL script for `test1`.`sbtest1`

[Worker001] test1@sbtest1@0.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker000] test1@sbtest1@1.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker002] test1@sbtest1@2.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker003] test1@sbtest1@3.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker001] test1@sbtest1@4.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker000] test1@sbtest1@5.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker003] test1@sbtest1@7.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker002] test1@sbtest1@6.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker001] test1@sbtest1@8.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker000] test1@sbtest1@9.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker001] test1@sbtest1@12.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker002] test1@sbtest1@11.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker003] test1@sbtest1@10.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

4 thds loading | 2% (399.22 MB / 19.79 GB), 2.60 MB/s, 1 / 1 tables done[Worker000] test1@sbtest1@13.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker001] test1@sbtest1@15.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker000] test1@sbtest1@17.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker002] test1@sbtest1@14.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

Deleted: 0 Skipped: 0 Warnings: 0

[Worker000] test1@sbtest1@784.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker003] test1@sbtest1@785.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker001] test1@sbtest1@786.tsv.zst: Records: 126903 Deleted: 0 Skipped: 0 Warnings: 0

[Worker002] test1@sbtest1@@787.tsv.zst: Records: 127339 Deleted: 0 Skipped: 0 Warnings: 0

Executing common postamble SQL

788 chunks (100.00M rows, 19.79 GB) for 1 tables in 1 schemas were loaded in 30 min 20 sec (avg throughput 7.98 MB/s)

0 warnings were reported during the load.

MySQL localhost JS >

加载数据花费了大概30分钟。在MySQL8中禁用重做日志可以进一步优化并行性。但这是一个巨大的进步。与其他逻辑备份工具相比,使用MySQL Shell将节省更多时间。我用其他的常用逻辑备份工具(如mysqldumpmydumper)重复了这个测试。结果如下:

7fef94e3300fe7035e97aac7709dbb89.png

看起来MySQL Shell在单表备份和导入上更快。这可以帮助数据库工程师重建分区表,跨云环境迁移,还可以替换常规的逻辑备份。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql dump 导出表_[译文]MySQL中快速逻辑备份一张单独的表 的相关文章

  • jest搭建vue项目单元测试-现有老项目

    说到项目会分为新建的醒目和老项目两种 jest搭建vue项目单元测试 vue cli创建新项目 我们接下来说现有老项目 现有的vue老项目或者没使用vue cli创建项目搭建jset单元测试 1 安装 npm i vue test util
  • 重启Vcenter命令

    重启Vcenter命令 通过ssh登录Vcenter 输入root 输入shell 输入service control stop all 输入service control start all 停止 启动或重新启动 VMware vCent
  • linux xenserver教程,XenServer常用命令

    监控检查类 xentop 查看XenServer与VM的资源使用情况 xsconsole 进入XenServer管理面板 查看网卡 IP 系统版本 系统时间 硬件信息等 xe task list 查看XenServer临时任务进程 serv
  • 【C语言】验证哥德巴赫猜想

    文章目录 问题来源 题目要求 如何判断素数 主函数 完整代码 效果演示 写代码中的误解 总结 问题来源 这是学校的一个作业 原题如下 题目先给出了哥德巴赫猜想的背景知识 我还真不知道 2000以内的正偶数都能分解成两个质数 素数 之和 题目
  • 毕业设计-基于 PID 控制算法仿真算法研究- Matlab

    目录 前言 课题背景和意义 实现技术思路 一 基本原理 二 无超调 PID 控制器的设计 三 无超调 PID 设计的验证 代码 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一
  • 安装anaconda及修改conda config 的channels/default_channels

    先说一下安装anaconda的方法 很简单 就是去官网下载然后在本地安装 bash Anaconda3 4 4 0 Linux x86 64 sh 这个过程中要耐心 会有提问 需要输入yes来回应 并且需要按很多的回车 总之 看见让输入ye
  • 转:机器学习的理解

    转李航博士的一篇关于机器学习理解的文章 算算时间 从开始到现在 做机器学习算法也将近八个月了 虽然还没有达到融会贯通的地步 但至少在熟悉了算法的流程后 我在算法的选择和创造能力上有了不小的提升 实话说 机器学习很难 非常难 要做到完全了解算
  • Ridis持久化

    Redis持久化 RDB Redis DataBase Redis会单独创建 fork 一个子进程来进行持久化 会先将数据写入到一个临时文件中 待持久化都结束了 再用这个临时文件替换上次持久化好的文件 整个过程中 主进程是不进行io操作的
  • 8--UI 初步认识 简易计算器

    UI是App的根基 一个App应该是先有UI界面 然后在UI的基础上增加实用功能 2 UI相对简单易学 UI普遍是学习过程中最简单的一块 能快速拥有成就感和学习兴趣 3 UI至关重要 开发中的绝大部分时间都在处理UI 谨记一条IOS软件开发
  • MySQL根据某一个或者多个字段查找重复数据

    sql 查出一张表中重复的所有记录数据 1 表中有id和name 两个字段 查询出name重复的所有数据 select from xi a where a username in select username from xi group
  • 系列教程

    PDF Search 系列教程来咯 在 Part 1 中 我们将演示如何从 PDF 中提取 处理并存储图像及文本 随着神经搜索 Neural Search 技术的普及 越来越多开发者 开始尝试用 Jina 解决非结构化数据的索引和搜索问题
  • MySQL必知必会 学习笔记 第二十五章 使用触发器

    触发器在MySQL 5中增加 触发器可以在MySQL响应DELETE INSERT UPDATE语句时自动执行一条SQL语句 MySQL 5中触发器名在每个表中唯一而不是在一个数据库中唯一 其他DBMS有的重名限制是数据库范围 以后MySQ
  • lua和测试(一)

    lua做为一门高级语言 在游戏产业运用到机会越来越多了 测试掌握几门脚本语言也有一定的重要性 以下对于lua组合输入做出一些引导 测试需要掌握的关于返回数值 主要用到布尔类 前言的指引 lua的语法比较简单和清晰 学过c语言的可以很好的掌握
  • 并发编程系列之自定义线程池

    前言 前面我们在讲并发工具类的时候 多次提到线程池 今天我们就来走进线程池的旅地 首先我们先不讲线程池框架Executors 我们今天先来介绍如何自己定义一个线程池 是不是已经迫不及待了 那么就让我们开启今天的旅途吧 什么是线程池 线程池可
  • selenium+python 对输入框的输入处理

    最近自己在做项目的自动化测试 公司无此要求 在用户管理模块做修改用户信息时 脚本已经跑成功 并且的确做了update操作 但是自己登陆页面检查 信息却没有被修改 再次确定系统该模块的编辑功能可用 脚本如下 if result num gt
  • 近千万EOS被盗事件回顾,大家请保护好自己的EOS私钥

    最近有伙伴被盗了价值近千万的EOS 于是查看了这次被盗活动账号记录 这次分享出来 一是有可能大家有线索 二是也让大家意识到数字货币私钥安全的重要性 事件回顾 受害人在7 9号被偷盗人通过update auth更换了账号授权公私钥 紧接着被转
  • 零基础到GPT高手:快速学习与利用ChatGPT的完全指南

    进入人工智能时代 令人惊叹的ChatGPT技术正在引爆全球 您是否想象过能够与智能语言模型对话 提升工作效率 解锁创意 甚至实现商业化变现 在本篇文章中 我将向你揭示ChatGPT的原理 学习技巧 并展示如何利用ChatGPT提升工作效率和
  • Windows11:QT5.14.2+PCL1.12.0+VS2019环境配置

    之前在win10系统下配置了PCL1 8 1 QT5 9 1 VS2015的开发环境 由于PCL库已经更新到了1 12 1而且1 8 1一直有bug 为了使用下新的算法库 今天配置一下新的开发环境 1 安装Qt5 14 2 Qt5 14 2
  • 【b站雅思笔记】Simon‘s IELTS Course - 听力部分

    前情提要 b站up主贼开心的小林上传的Simon的听力课 资料均来源于她 参考 雅思阅读 最好的雅思课程 阅读部分全集 https www bilibili com video BV1ea4y1x7qR spm id from 333 78

随机推荐

  • Spring为什么要用的三级缓存解决循环依赖

    一 代码准备 Component aService public class AService Autowired private BService bService public void test System out println
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • react_hooks系列05_useRef,useImperativeHandle,高阶组件forwordRef

    一 useRef 1 uesRef使用在官方标签上 useRef 返回一个可变的 ref 对象 其 ref 对象 current 属性被初始化为传入的参数 initialValue 返回的 ref 对象在组件的整个生命周期内保持不变 imp
  • 蓝桥杯字母阵列

    字母阵列 递归解法 仔细寻找 会发现 在下面的8x8的方阵中 隐藏着字母序列 LANQIAO SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLANQIAO RSFWFNYA XIFZVWAL COAIQNAL 我
  • 教你怎么导入导出数据

    最近在做一个项目 需要对数据进行导入导出 实现之后 自己也做了一个总结 总体来说还是比较容易的 第一次的话肯定有许多坑的 细节真的很重要 当你踏过一个又一个坑 一路路走来 你会发现自己的信心越来越强 对于数据的导入导出 我们首先写一个工具类
  • 代码检查、评审、单元测试工具 大搜集

    看书真是迅速进入一个陌生领域的最快办法 系统的 体系完整的知识比起在互联网上七拼八凑出的认识强太多了 先记下一些理论概念 软件生命周期模型 分析 设计与文档 编码与审查 测试与调试 发布与维护 软件测试对象的6种分类 单元测试 静态检查 动
  • 数据结构---线性表的静态/动态分配与顺序/链式存储

    线性表 基于严魏敏版数据结构c语言实现 谭浩强版c语言 数据元素在计算机中的存储分为顺序存储和链式存储 顺序存储 借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系 链式存储 借助指示元素存储地址的指针表示数据元素之间的逻辑关系 ps
  • matlab定义机器人位置,机器人自定位问题(数学建模)

    形形色色 各式各样的机器人正在走进人们的生产与生活 发挥着越来越重要的作用 这些机器人 一般都拥有 感官 各种传感器 大脑 智能计算的软硬件 和 执行器 各种操控设备 等 它们在自己的工作场合内 能自主感知 自主决策并完成使命 为达到这样的
  • 笔记---Linux安装OpenCV及VSCode的配置编译

    学更好的别人 做更好的自己 微卡智享 本文长度为4250字 预计阅读10分钟 前言 最近在学点新东西 教程中主要也是在Linux中使用 对于我这个以前从未接触Linux系统的人来说 正好也是个机会掌握下LInux系统 这篇就是记录在Linu
  • 批量创建文件与文件夹

    1 批量创建文件 下面们来说一下如何在pyhton中去批量创建文件 假设我要新建10个txt文件 这里我用一个for循环 for i in range 10 这里的 指代的是当前文件夹 i表示文件的名称 a表示没有该文件就新建 f open
  • Java 泛型 T,E,K,V,?

    泛型带来的好处 在没有泛型的情况的下 通过对类型 Object 的引用来实现参数的 任意化 任意化 带来的缺点是要做显式的强制类型转换 而这种转换是要求开发者对实际参数类型可以预知的情况下进行的 对于强制类型转换错误的情况 编译器可能不提示
  • 入门力扣自学笔记279 C++ (题目编号:1123)

    1123 最深叶节点的最近公共祖先 题目 给你一个有根节点 root 的二叉树 返回它 最深的叶节点的最近公共祖先 回想一下 叶节点 是二叉树中没有子节点的节点 树的根节点的 深度 为 0 如果某一节点的深度为 d 那它的子节点的深度就是
  • python 实现 softmax分类器(MNIST数据集)

    最近一直在外面 李航那本书没带在身上 所以那本书的算法实现估计要拖后了 这几天在看Andrew Ng 机器学习的课程视频 正好看到了Softmax分类器那块 发现自己之前理解perceptron与logistic regression是有问
  • JSTL和EL:

    El表达式使JSP的开发变得更加简单 简介 什么是EL Expression Language 表达式语言 El得功能 代替JSP页面中数据访问时得代码复杂编程 EL得特点 自动转换类型 EL得到某个数据时可以自动转换类型 使用简单 EL表
  • 【微信小程序】数组排序以及去重问题详解

    微信小程序中 通常有一些数据 是存在前端缓存里的 但是这个数据如果是没有处理过 需要动态处理的时候 数据就会有问题 所以 提供一些数据的几种处理方式 二维数组排序 var arr1 new Array arr1 中猫猫er E7555大号
  • FineReport 帆软实战一 帆软概述及软件下载

    前言 公司近期引进帆软报表替换原先的润乾报表 以提供更为强大的报表处理能力 因此我也开始从零学习帆软报表 帆软报表报表分为FineReport和FineBI Report可以理解为面向开发人员的报表设计器 用于开发复杂类型的报表 需要开发人
  • 计算机中的二进制表示-4和5

    十进制 二进制 5 00000000 00000000 00000000 00000101 4 11111111 11111111 11111111 11111100 负数的二进制如何得出 相信正数的二进制表示大家都懂 但是这个 4怎么来的
  • 一文教你如何在HBuilderX中使用模拟器开发调试App

    一文教你如何在HBuilderX中使用模拟器开发调试App 第一步下载HBuilderX 第二步 下载一个模拟器 这里我选择的是网易出品的mumu模拟器 第三步 打开上面安装的两个软件 接着在hbx里运行到模拟器 如下图所示 如果和图片中一
  • 从12306验证码看人工智能未来发展

    事件背景 最近12306对登陆验证过程进行了升级 让很多抢票软件失效 也引起众多网友的热议 如图 用户在登陆时需要选择和题目给出的描述相同的图片 新的验证方式推出后 不少网友也在网上发表看法 大部分网友表示此举很给力 黄牛抢票软件失效了 对
  • mysql dump 导出表_[译文]MySQL中快速逻辑备份一张单独的表

    逻辑备份在跨云环境的数据迁移和表级恢复中非常有用 8 0 22的MySQL shell引入了两个新的实用程序util dumpTable 和util exportTable 用于从MySQL中导出单独的表 在8 0 22之前 无法使用MyS