MySQL Shell 逻辑备份恢复API

news2024/12/23 9:55:26

MySQL8.0开始提供的MySQL Shell功能,是DBA推向了另一个高度,除SQL外,正式踏入Cloud数据库服务 和 shell操作数据库领域(MGR是一个代表点)。

日常DBA工作可以通过MySQL Shell更容易实现。因为MySQL Shell处理用JavaScript、Python和SQL编写的代码,提供了一种交互式代码执行模式。Shell是一个新的知识点,可用于Microsoft Windows、Linux和64位平台的macOS。并且也支持任何GA版本的MySQL 5.7或8.0一起使用。

MySQL8.0 推出Clone功能之后,8.0.21增加了一种新的逻辑备份恢复API接口:

  • 多线程 ;
  • 控制速率 ;
  • 支持zstd压缩 ;
  • 支持chunk并行导出 ;
  • load data并行导入 ;
  • 输出执行信息,行数,进度条 等;
  • 备份到第三方存储设备中 如:OCI,S3等 ;

MySQL shell脚本里逻辑备份7个API接口:

 

1. util.dumpInstance() 用于备份整个实例 2. util.dumpSchemas() 用于备份指定schema 3. util.dumpTables() 用于备份表 4. util.loadDump() 用于恢复备份 5. util.importTable() 用于导入表 6. util.importJson() 用户JSON导入 7. util.export_table() 用于导出表

在原有的逻辑备份恢复工具中(mysqldump,mysqlpump,mydumper)又多了一种并行备份恢复方式。

导出

不同级别的逻辑dump:实例,库,表。

dump-schemas指定schema级别进行备份:
输出信息中,打印了 线程,DDL, rows,schema,tables ,Compressed 等信息。这些记录信息是可观判断进度的很好依据。

shell> mysqlsh shadmin@172.17.27.48:3380  -- util dump-schemas employees  --outputUrl=/tmp/dump

Please provide the password for 'shadmin@172.17.27.48:3380': ******
Save password for 'shadmin@172.17.27.48:3380'? [Y]es/[N]o/Ne[v]er (default No): N

Acquiring global read lock
Global read lock acquired
Initializing - done 
1 schemas will be dumped and within them 11 tables, 2 views.
Gathering information - done 
All transactions have been started
Locking instance for backup
Global read lock has been released
Writing global DDL files
NOTE: Could not select columns to be used as an index for table `employees`.`employees01`. Chunking has been disabled for this table, data will be dumped to a single file.
Running data dump using 4 threads.
NOTE: Progress information uses estimated values and may not be accurate.
Writing schema metadata - done       
Writing DDL - done         
Writing table metadata - done         
Starting data dump
100% (2.52M rows / ~2.51M rows), 744.64K rows/s, 28.66 MB/s uncompressed, 7.84 MB/s compressed                  
Dump duration: 00:00:03s                                                                      
Total duration: 00:00:03s                                                                     
Schemas dumped: 1                                                                             
Tables dumped: 11                                                                             
Uncompressed data size: 96.44 MB                                                              
Compressed data size: 27.11 MB                                                                
Compression ratio: 3.6                                                                        
Rows written: 2518358                                                                         
Bytes written: 27.11 MB                                                                       
Average uncompressed throughput: 27.77 MB/s                                                   
Average compressed throughput: 7.81 MB/s  

MySQL服务器general日志记录里 RR隔离级别 ,多线程处理机制,FTWRL等操作都包含。

2022-12-16T11:43:58.787526+08:00	24 Query	FLUSH NO_WRITE_TO_BINLOG TABLES
2022-12-16T11:43:58.789720+08:00	24 Query	FLUSH TABLES WITH READ LOCK
2022-12-16T11:43:58.789994+08:00	24 Query	SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2022-12-16T11:43:58.790235+08:00	24 Query	START TRANSACTION WITH CONSISTENT SNAPSHOT
2022-12-16T11:43:58.790951+08:00	24 Query	SELECT @@GLOBAL.VERSION
2022-12-16T11:43:58.791192+08:00	24 Query	EXPLAIN SELECT 1
2022-12-16T11:43:58.791488+08:00	24 Query	SELECT SCHEMA_NAME,DEFAULT_COLLATION_NAME FROM information_schema.schemata WHERE (STRCMP(SCHEMA_NAME COLLATE utf8_bin,'employees'))=0
2022-12-16T11:43:58.792735+08:00	24 Query	SELECT COUNT(*) FROM information_schema.schemata
2022-12-16T11:43:58.794541+08:00	24 Query	SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,TABLE_ROWS,AVG_ROW_LENGTH,ENGINE,CREATE_OPTIONS,TABLE_COMMENT FROM information_schema.tables WHERE (STRCMP(TABLE_SCHEMA COLLATE utf8_bin,'employees'))=0
2022-12-16T11:43:58.797286+08:00	28 Connect	shadmin@iZuf6178v14ipc59jbbpfnZ on  using TCP/IP
2022-12-16T11:43:58.797528+08:00	26 Connect	shadmin@iZuf6178v14ipc59jbbpfnZ on  using TCP/IP
2022-12-16T11:43:58.797749+08:00	27 Connect	shadmin@iZuf6178v14ipc59jbbpfnZ on  using TCP/IP
2022-12-16T11:43:58.797988+08:00	25 Connect	shadmin@iZuf6178v14ipc59jbbpfnZ on  using TCP/IP

导出表文件结构如下:

[root@schouse dump]# tree
。。。
├── employees@titles@@0.tsv.zst      #数据信息
├── employees@titles@@0.tsv.zst.idx  #索引对应信息
├── employees@titles.json            #表基础信息
├── employees@titles.sql             #表创建语句
├── @.done.json                      #导出表名 表行数等信息
├── @.json                           #gtid binlog postion信息
├── @.post.sql                       #版本信息
└── @.sql

核心控制参数

dump参数说明
dryRundump的内容以及MySQL数据库服务兼容性检查结果的信息
showProgress显示(true)或隐藏(false)执行的进度信息。
maxRatedump期间每个线程每秒用于数据读取吞吐量的最大字节数。
defaultCharacterSet导出时使用的字符集。
consistent备份一致数据,使用FLUSH TABLES WITH read lock语句,设置全局读锁,或者使用lock TABLES语句
threads并行线程数。每个线程都有自己的MySQL实例连接。默认值为4。
compression写入数据转储文件时使用的压缩算法:“none”,“gzip”、“zstd”。默认值:“zstd”。

除此之外:dump-instance,dump-tables使用也比较简单

#util dump-instance <outputUrl> [<options>]
shell> mysqlsh root@localhost  -- util dump-instance  /tmp/dump  --excludeSchemas=employees

#util dump-tables <schema> <tables> --outputUrl=<str> [<options>]
shell> mysqlsh shadmin@172.17.27.48:3380  -- util dump-tables employees employees03  --outputUrl=/tmp/dump

导入

数据导入的接口loadDump
指定之前备份的文件路径:整个过程执行ddl语句 load数据。

MySQL  127.0.0.1:3380  JS > util.loadDump("/tmp/dump/")
Loading DDL and Data from '/tmp/dump/' using 4 threads.
Opening dump...
Target is MySQL 8.0.31. Dump was produced from MySQL 8.0.31
NOTE: Load progress file detected. Load will be resumed from where it was left, assuming no external updates were made.
You may enable the 'resetProgress' option to discard progress for this MySQL instance and force it to be completely reloaded.
Scanning metadata - done       
Executing common preamble SQL
Executing DDL - done       
Executing view DDL - done       
Starting data load
Executing common postamble SQL                       
100% (257 bytes / 257 bytes), 0.00 B/s, 2 / 2 tables done
Recreating indexes - done 
2 chunks (11 rows, 257 bytes) for 2 tables in 1 schemas were loaded in 0 sec (avg throughput 257.00 B/s)
0 warnings were reported during the load.         

单表结构创建,数据导入操作

#单独导入表结构
 util.loadDump("/tmp/dump", {  includeTables: ["worldb.city"], loadDdl: true,  loadData: false});

#单独导入数据
 util.importTable ("/tmp/dump/worldb@city@@0.tsv.zst", {  schema: "worldb",   table: "city"});

执行结果日志记录:

shell# cat load-progress.22228e8c-b0ee-11ec-a2d1-00163e23e2cc.json 
{"op":"SERVER-UUID","done":true,"timestamp":1672108993998,"uuid":"22228e8c-b0ee-11ec-a2d1-00163e23e2cc"}
{"op":"SCHEMA-DDL","done":false,"timestamp":1672109012555,"schema":"worldb"}
{"op":"TABLE-DDL","done":false,"timestamp":1672109012555,"schema":"worldb","table":"city"}
{"op":"TABLE-DDL","done":false,"timestamp":1672109012555,"schema":"worldb","table":"ct"}
{"op":"SCHEMA-DDL","done":true,"timestamp":1672109012578,"schema":"worldb"}
{"op":"TABLE-DATA","done":false,"timestamp":1672109012579,"schema":"worldb","table":"city","chunk":0}
{"op":"TABLE-DATA","done":false,"timestamp":1672109012579,"schema":"worldb","table":"ct","chunk":-1}
{"op":"TABLE-DATA","done":true,"timestamp":1672109012593,"schema":"worldb","table":"city","chunk":0,"bytes":210,"raw_bytes":148,"rows":9}

util.loadDump 优点如下:

  • 多线程并行操作。
  • 支持断点续传功能:progressFile文件记录执行进度,从上次完成的地方继续执行(如上述load-progress…progress记录文件)。如需从头开始resetProgress 设置为 true。
  • 支持延迟创建二级索引。
  • 通过LOAD DATA LOCAL INFILE 命令来导入数据(一个事务)。
  • 如果单个文件过大,自动进行切割,以避免产生大事务。

其他

export_table
跟SQL【SELECT。。。INTO OUTFILE】语句中一样的功效,支持多种文件格式[default|csv|csv unix|tsv]。


为导出数据文件的格式指定一组字段和行处理选项。还可以通过指定一个或多个行TerminatedBy、fieldsTerminatedBy,fieldsEnclosedBy、fieldsOptionallyEnclosed和fieldsScapedBy选项来更改设置。

MySQL  127.0.0.1:3380  JS > util.exportTable("test.employees", "/tmp/employees.txt")
Initializing - done 
Gathering information - done 
Running data dump using 1 thread.
NOTE: Progress information uses estimated values and may not be accurate.
Starting data dump
100% (300.02K rows / ~299.47K rows), 0.00 rows/s, 0.00 B/s
Dump duration: 00:00:00s                                  
Total duration: 00:00:00s                                 
Data size: 13.82 MB                                       
Rows written: 300024                                      
Bytes written: 13.82 MB                                   
Average throughput: 13.82 MB/s                            
                                                          
The dump can be loaded using:                             
util.importTable("/tmp/employees.txt", {                  
    "characterSet": "utf8mb4",
    "schema": "test",
    "table": "employees"
})

import-table
并行表导入实用程序使用LOAD DATA LOCAL INFILE语句上载数据,因此目标服务器上的LOCAL_INFILE系统变量必须设置为ON。

MySQL  127.0.0.1:3380  JS  > \sql SET GLOBAL local_infile = 1;

 MySQL  127.0.0.1:3380  JS > util.importTable("/tmp/employees.txt", 
{"characterSet": "utf8mb4","schema": "test","table": "employees" ,
"threads":4 , "showProgress": true})

Importing from file '/tmp/employees.txt' to table `test`.`employees` in MySQL Server at 127.0.0.1:3380 using 1 thread
[Worker000] employees.txt: Records: 300024  Deleted: 0  Skipped: 0  Warnings: 0
100% (13.82 MB / 13.82 MB), 2.46 MB/s
File '/tmp/employees.txt' (13.82 MB) was imported in 6.0851 sec at 2.27 MB/s
Total rows affected in test.employees: Records: 300024  Deleted: 0  Skipped: 0  Warnings: 0

总结

MySQL Shell备份恢复API,按照官方Relase记录 8.0.27版本之后,是一个比较稳定的版本。按照提供的速度和功能性方面,可以说一些逻辑处理场景中,MySQL shell应该是效率最高。目前API 支持5.7和8.0版本。

mysqldumpmysqlpumpmydumpermysql shell
线程单线程多线程多线程多线程
压缩支持支持支持支持
远程支持支持支持支持
备份速度
恢复速度
分割不支持不支持支持支持
第三方存储不支持不支持不支持支持

参考

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities.html
帮助指南

mysqlsh  -- util dump-instance  --help
mysqlsh  -- util dump-schemas   --help
mysqlsh  -- util dump-tables    --help
mysqlsh  -- util import-table   --help
mysqlsh  -- util exportTable    --help
mysqlsh  -- util loadDump       --help

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3、Ubuntu20Server安装远程连接

Ubuntu20Server安装 安装虚拟机virtualbox VMware Workstation Pro 下载Ubuntu安装光驱Get Ubuntu | Download | Ubuntu 都下载完毕准备安装驱动 配置信息 这里用的是Ubuntu Server 一路Done或回车过三关斩六将来到这里 安装到这里,需要修改镜像站点地址,修改为国内的163网易…

Linux文件系统及磁盘命名

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Golang 调整视频fps和分辨率 | Golang工具

目录 前言 环境依赖 代码 总结 前言 本文提供将视频修改fps和分辨率的工具方法&#xff0c;一如既往的实用主义。 主要也是学习一下golang使用ffmpeg工具的方式。 环境依赖 ffmpeg环境安装&#xff0c;可以参考我的另一篇文章&#xff1a;windows ffmpeg安装部署_阿良的博…

Vector - VT System - 模拟IO板卡_VT2816

前面介绍了模拟量的输入板卡VT2004&#xff0c;今天我们介绍的这个板卡依然是模拟量的输入&#xff0c;具体使用场景可能要我们根据实际的使用场景去进行选择。VT2004更偏向于激励&#xff0c;而VT2816更偏向于通用模拟量的IO使用&#xff0c;下面我们从功能、参数、硬件结构等…

SpringBoot接入JaCoCo实践代码覆盖率

这里写自定义目录标题参考概述接入静态接入和动态接入参考 SpringBoot接入JaCoCo实践 概述 JaCoCo是面向Java的开源代码覆盖率工具&#xff0c;JaCoCo以Java代理模式运行&#xff0c;它负责在运行测试时检测字节码。 JaCoCo会深入研究每个指令&#xff0c;并显示每个测试过程…

【uniapp】关于webview组件无法自定义宽高问题解决

最近做的项目中&#xff0c;在h5环境运行上遇到关于webview组件无法自定义宽高问题&#xff0c;要怎么弄才好呢&#xff0c;其实没那么难&#xff0c;很简单的&#xff0c;现在将解决方法讲一下。 使用例子 默认是全屏加载的&#xff0c;现在需要内嵌一个webview组件放在限定…

10款最佳在线地图软件介绍

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 在线地图有无数的用途&…

3D模型轻量化处理教程【Blender】

在本文中&#xff0c;我们将介绍三种在 Blender 中网格轻量化的方法&#xff0c;并以一些提示和技巧作为结尾&#xff0c;供你在处理网格和对象时使用。 1、网格轻量化概述 无论你是想创建简单还是复杂的 3D 设计&#xff0c;Blender 都是拟工具箱中的一个很棒的程序。 它是…

Nessus 高级扫描

系列文章 Nessus介绍与安装 Nessus Host Discovery Nessus高级扫描 1.启动nessus cd nessus sh qd_nessus.sh2.进入nessus网站&#xff0c;点击【new Scan】 https://kaliip:8834/3.选择【adVanced Scan】 4.输入Name【高级扫描】&#xff0c;Description【高级扫描】&…

深度学习基础——填充(padding)与步幅(stride)

填充&#xff08;padding&#xff09; 在上图中&#xff0c;输入图片尺寸为333\times333&#xff0c;输出图片尺寸为222\times222&#xff0c;经过一次卷积之后&#xff0c;图片尺寸为222\times222&#xff0c;经过一次卷积之后&#xff0c;图片尺寸变小。卷积输出特征图的尺寸…

SQLServer 2016 备份

1、下载并安装SQLServer2016服务器端&#xff0c; 下载地址&#xff1a;https://www.microsoft.com/zh-cn/evalcenter/download-sql-server-2016 2、下载并安装SSMS管理工具&#xff0c; 下载地址&#xff1a;https://download.microsoft.com/download/8/a/8/8a8073d2-2e00-…

渗透学习-CTF篇-web-BUUCTF

文章目录前言一、[WesternCTF2018]shrine前言 随着学习的不断深入&#xff0c;为了防止自己忘记之前所学的内容&#xff0c;于是我决定再不断的向下学习的同时做一些ctf的题来唤醒自己的记忆&#xff01;&#xff01; 一、[WesternCTF2018]shrine 这一关主要是SSTI的内容&…

Docker安装部署sql审计平台Archery1.9.1版本

安装dockercurl -fsSL https://get.docker.com -o get-docker.sh | sudo sh安装docker composesudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod x…

chrono_Time_point (三)

chrono_time_point (三&#xff09; 文章目录chrono_time_point (三&#xff09;模板参数源码解析构造函数&#xff1a;成员函数time_since_epoch()例子timepoint提供的操作timepoint的溢出C和POSIX提供的Date/Time函数演示案例&#xff08;timepoint和日历时间的转换&#xff…

SpringMVC | 使用Xml或注解进行开发

一、Spring MVC简介Spring MVC&#xff08;全称 Spring Web MVC&#xff09;是 Spring 框架提供的一款基于 MVC 模式的轻量级 Web 开发框架。MVC架构&#xff08;1&#xff09;示意图&#xff08;2&#xff09;各层职责Model&#xff1a;负责对请求进行处理&#xff0c;并将结果…

计算机SCI论文怎么发表?有哪些建议? - 易智编译EaseEditing

一般论文的水平是这样&#xff1a;普刊&#xff1c;核心&#xff1c;SCI。 不同的专业都可以发SCI&#xff0c;只是影响因子高低不用而已&#xff0c;有的领域分值高&#xff0c;有的偏低。 就是说不同领域SCI期刊&#xff0c;影响因子一样&#xff0c;但水平是一样的。 怎样…

三、元素操作

1、切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改&#xff0c;与Python中list的切片操作一样 ndarray数组可以基于0-n的下标进行索引&#xff0c;切片对象可以通过内置的slice函数&#xff0c;并设置start&#xff0c;stop及step参数进行&#xff0c;从原数组…

【Java寒假打卡】Java基础-反射

【Java寒假打卡】Java基础-反射概述获取Class对象的三种方式反射-获取Constructor对象利用Constructor数组创建对象获取Field对象反射获取成员变量并且使用反射获取成员对象反射获取成员对象并运行概述 Java反射机制&#xff1a;是在运行状态中&#xff0c;对于任意一个类&…

使用VS code快速搭建一个Golang项目

文章目录前言安装go语言环境了解Go开发相关的环境变量熟悉Go Module创建一个go项目项目迁移前言 VC code是一款巨好用的编辑器&#xff0c;使用vs code开发项目需要进行一些配置。项目中需要用到很多的包&#xff0c;无论是自己建的还是第三方的。由于go语言的生态环境没有jav…

【路由器连接天翼网关2.0问题解决思路】

文章目录一. 天翼网关如何切换新账号&#xff1f;背景操作流程1. 拔掉光纤2. 重置光猫3. 管理员页面进行认证4. 重新插上光纤&#xff0c;管理员页面会显示认证成功二、路由器连接光猫无网如何解决&#xff1f;背景操作流程1. 登陆普通管理员2. 获取超级管理员3. 登陆超级管理页…