您当前的位置:首页 > 电脑百科 > 数据库 > 百科

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

时间:2023-12-19 14:17:41  来源:微信公众号  作者:懂点IT的耿小厨

上篇文章(转战MySQL Shell!数据库备份新姿势,轻松搞定备份操作!)简单介绍了使用MySQL Shell进行数据库备份,本文基于上文的备份进行数据恢复演示操作。

一、恢复单表

因为上次备份的表是testdb1.test1表,如果恢复到当前库,则可以先删除该库中的表,再恢复。

1、先删除库里的表

# mysqlsh -u root  -p -S /data/mysql/mysql3306/tmp/mysql.sock
Please provide the password for 'root@/data%2Fmysql%2Fmysql3306%2Ftmp%2Fmysql.sock': *********
Save password for 'root@/data%2Fmysql%2Fmysql3306%2Ftmp%2Fmysql.sock'? [Y]es/[N]o/Ne[v]er (default No): 
MySQL Shell 8.0.35
Copyright (c) 2016, 2023, 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%2Fmysql3306%2Ftmp%2Fmysql.sock'
Fetching schema names for auto-completion... Press ^C to stop.
Your MySQL connection id is 83
Server version: 8.0.33-25 Percona Server (GPL), Release 25, Revision 60c9e2c5
No default schema selected; type use <schema> to set one.
 MySQL  localhost  JS > sql
Switching to SQL mode... Commands end with ;
Fetching global names for auto-completion... Press ^C to stop.
 MySQL  localhost  SQL > use testdb1;
Default schema set to `testdb1`.
Fetching global names, object names from `testdb1` for auto-completion... Press ^C to stop.
 MySQL  localhost  testdb1  SQL > show tables;
+-------------------+
| Tables_in_testdb1 |
+-------------------+
| test1             |
+-------------------+
1 row in set (0.0010 sec)
 MySQL  localhost  testdb1  SQL > drop table test1;
Query OK, 0 rows affected (0.0518 sec)
 MySQL  localhost  testdb1  SQL >

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

2、修改参数

进行数据恢复时local_infile参数需要修改为on,因此需先调整参数,否则将会报错,例如:

MySQL  localhost  testdb1  SQL > js
Switching to JAVAScript mode...
 MySQL  localhost  testdb1  JS > util.loadDump('/data/backup/backup_tables');
ERROR: The 'local_infile' global system variable must be set to ON in the target server, after the server is verified to be tRusted.
Util.loadDump: local_infile disabled in server (MYSQLSH 53025)
 MySQL  localhost  testdb1  JS > sql
Switching to SQL mode... Commands end with ;
 MySQL  localhost  testdb1  SQL > set global local_infile=on;
Query OK, 0 rows affected (0.0002 sec)

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

3、进行单表恢复

上面已经删除了原库里的表,现在通过备份进行恢复。

MySQL  localhost  testdb1  SQL > js
Switching to JavaScript mode...
 MySQL  localhost  testdb1  JS >  util.loadDump('/data/backup/backup_tables');
Loading DDL and Data from '/data/backup/backup_tables' using 4 threads.
Opening dump...
Target is MySQL 8.0.33-25. Dump was produced from MySQL 8.0.33-25
Scanning metadata - done       
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL - done       
Executing view DDL - done       
Starting data load
Executing common postamble SQL                       
100% (157 bytes / 157 bytes), 0.00 B/s, 1 / 1 tables done
Recreating indexes - done       
1 chunks (8 rows, 157 bytes) for 1 tables in 1 schemas were loaded in 0 sec (avg throughput 157.00 B/s)
0 warnings were reported during the load.                
 MySQL  localhost  testdb1  JS >

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

查看恢复结果:表及数据已恢复。

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

恢复过程中,对应的备份路径下会生成一个load-progress.*.json文件,该文件记录了恢复进度及结果,以便于断点续处理,文件存储的具体内容如下:

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

注:如果需多次进行相同操作时,注意修改改文件内容或删除该文件,或者自定义一个文件,例如:

util.loadDump("PrefixPARURL", progressFile: "progress.json"})

4、恢复至其他库

很多实际情况下的数据恢复是为了将备份中的一部分数据恢复至目标表,或进行数据对比,因此不能将已存在的表删除。那么建议创建一个临时恢复用的库或在其他实例上创建新库进行恢复。那么,恢复至其他库(库名不一样),该如何操作呢?具体操作如下:

先创建一个空库:

MySQL  localhost  testdb1  SQL > create database rec;
Query OK, 1 row affected (0.0220 sec)
 MySQL  localhost  testdb1  SQL > use rec;
Default schema set to `rec`.
Fetching global names, object names from `rec` for auto-completion... Press ^C to stop.
 MySQL  localhost  rec  SQL > show tables;
Empty set (0.0011 sec)
 MySQL  localhost  rec  SQL >

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

恢复rec库并查看结果:

MySQL  localhost  rec  JS > util.loadDump('/data/backup/backup_tables',{"schema":"rec"});
Loading DDL and Data from '/data/backup/backup_tables' using 4 threads.
Opening dump...
Target is MySQL 8.0.33-25. Dump was produced from MySQL 8.0.33-25
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
100% (157 bytes / 157 bytes), 0.00 B/s, 0 / 1 tables done
Recreating indexes - done       
Executing common postamble SQL                           
1 chunks (8 rows, 314 bytes) for 1 tables in 1 schemas were loaded in 0 sec (avg throughput 157.00 B/s)
0 warnings were reported during the load.                
 MySQL  localhost  rec  JS > sql
Switching to SQL mode... Commands end with ;
 MySQL  localhost  rec  SQL > use rec;
Default schema set to `rec`.
Fetching global names, object names from `rec` for auto-completion... Press ^C to stop.
 MySQL  localhost  rec  SQL > show tables;
+---------------+
| Tables_in_rec |
+---------------+
| test1         |
+---------------+
1 row in set (0.0012 sec)
 MySQL  localhost  rec  SQL > select  count(*) from test1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.0033 sec)
 MySQL  localhost  rec  SQL >

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

数据已恢复,且数据条数一致。

此时的备份文件目录里的load-progress文件内容会增加一批:

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

二、恢复单个schema

因为恢复至和备份库名一致的库需删除原库,因此就不演示该操作,而采用恢复至其他库的方式演示。

1、创建一个新库

MySQL  localhost  rec  SQL > use rec1;
Default schema set to `rec1`.
Fetching global names, object names from `rec1` for auto-completion... Press ^C to stop.
 MySQL  localhost  rec1  SQL > show tables;
Empty set (0.0011 sec)
 MySQL  localhost  rec1  SQL >

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

2、进行数据恢复

从上期备份的schema中恢复至rec1库,添加schema参数即可。

具体步骤如下:

MySQL  localhost  rec1  SQL > js
Switching to JavaScript mode...
 MySQL  localhost  rec1  JS > util.loadDump('/data/backup/backup_schemas',{"schema":"rec1"})
Loading DDL and Data from '/data/backup/backup_schemas' using 4 threads.
Opening dump...
Target is MySQL 8.0.33-25. Dump was produced from MySQL 8.0.33-25
Scanning metadata - done       
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL - done       
Executing view DDL - done       
Starting data load
1 thds loading | 100% (14.06 MB / 14.06 MB), 27.90 MB/s, 11 / 11 tables done
Executing common postamble SQL                                              
Recreating indexes - done       
12 chunks (862 rows, 14.06 MB) for 11 tables in 1 schemas were loaded in 1 sec (avg throughput 14.06 MB/s)
0 warnings were reported during the load.                                   
 MySQL  localhost  rec1  JS >

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

3、查看恢复结果

可见,表已恢复至rec1库中。

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

执行恢复操作时,对应的备份目录也生成了load-progress.*.json文件,内容如下:

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

三、从整库备份中恢复

1、恢复整个实例的库

恢复整库时,如果目标库已经存在,则需要先删除(同恢复单表或单库类似),之后才可以进行恢复,否则会报库及表已经存在的错误。本文为了演示,先删除之前的库,生产环境千万别删库!!!

MySQL  localhost  rec1  JS > sql
Switching to SQL mode... Commands end with ;
 MySQL  localhost  rec1  SQL > drop database testdb;
Query OK, 11 rows affected (0.2389 sec)
 MySQL  localhost  rec1  SQL > drop database testdb1;
Query OK, 1 row affected (0.0276 sec)
 MySQL  localhost  rec1  SQL > js
Switching to JavaScript mode...
 MySQL  localhost  rec1  JS > util.loadDump('/data/backup');
Loading DDL and Data from '/data/backup' using 4 threads.
Opening dump...
Target is MySQL 8.0.33-25. Dump was produced from MySQL 8.0.33-25
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
1 thds loading | 100% (14.06 MB / 14.06 MB), 8.39 MB/s, 12 / 12 tables done
Executing common postamble SQL                                             
Recreating indexes - done       
13 chunks (870 rows, 14.06 MB) for 12 tables in 2 schemas were loaded in 1 sec (avg throughput 14.06 MB/s)
0 warnings were reported during the load.                                  
 MySQL  localhost  rec1  JS > sql
Switching to SQL mode... Commands end with ;
 MySQL  localhost  rec1  SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| rec                |
| rec1               |
| sys                |
| testdb             |
| testdb1            |
+--------------------+
8 rows in set (0.0009 sec)
 MySQL  localhost  rec1  SQL >

数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复

可见,以上被删除的库已恢复。

四、结语

MySQL Shell的数据恢复操作有很多可选参数便于灵活操作,大家可以自己实操实验一下。也可以通过修改并发参数来对比其他逻辑备份工具的效率。



Tags:数据恢复   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  Search: 数据恢复  点击:(41)  评论:(0)  加入收藏
硬盘坏了怎么把数据弄出来?硬盘数据恢复教程,赶紧学习
硬盘格式化,对于许多人来说,可能意味着数据的终结。但实际上,即使经历了格式化,数据可能并未完全消失。这背后的原理是什么?格式化后的硬盘,是否还有恢复数据的可能?第一个:专家级数...【详细内容】
2024-01-25  Search: 数据恢复  点击:(53)  评论:(0)  加入收藏
数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复
上篇文章(转战MySQL Shell!数据库备份新姿势,轻松搞定备份操作!)简单介绍了使用MySQL Shell进行数据库备份,本文基于上文的备份进行数据恢复演示操作。一、恢复单表因为上次备份的...【详细内容】
2023-12-19  Search: 数据恢复  点击:(114)  评论:(0)  加入收藏
计算机服务器中了勒索病毒怎么解决,勒索病毒解密步骤数据恢复
网络技术的不断发展,为企业的生产生活提供了极大的便利性,随着企业数字化办公系统的实施,数据安全引起了企业强烈重视。近期,经过云天数据恢复中心对勒索病毒的处理发现,当下市面...【详细内容】
2023-11-20  Search: 数据恢复  点击:(145)  评论:(0)  加入收藏
数据库中了mkp勒索病毒怎么办,mkp勒索病毒解密,数据恢复
在当今社会,科技技术飞速发展,为人们的生产生活提供了强有力的支撑,但随之而来的网络安全威胁也无处不在。近期,云天数据恢复中心连续收到很多企业的求助,企业的数据库遭到了mkp...【详细内容】
2023-10-25  Search: 数据恢复  点击:(246)  评论:(0)  加入收藏
2023年需要了解的15大数据恢复工具
我们都有过这样的经历,一个无意的点击,一个可疑的文件,或者格式化错误会导致突然的设备或分区崩溃。在这种情况下,如何恢复重要文件?幸运的是,数据恢复工具可以提供帮助,下面小编来...【详细内容】
2023-05-25  Search: 数据恢复  点击:(261)  评论:(0)  加入收藏
苹果手机没有备份怎么恢复数据?数据恢复,轻松解决!
我们通常都会建议用户定期备份手机数据,以防止重要数据丢失。然而,有时候我们可能会遇到意外情况,苹果手机没有进行备份,导致重要数据的丢失。那么,苹果手机没有备份怎么恢复数据...【详细内容】
2023-05-22  Search: 数据恢复  点击:(245)  评论:(0)  加入收藏
iPhone数据恢复软件:Omni Recover Mac版
为大家推荐一款mac数据恢复软件,Omni Recover Mac版主要从iDevices恢复丢失的数据,已删除的照片、消息、WhatsApp聊天等内容都可以通过Omni Recover mac特别版进行检索并恢复,...【详细内容】
2022-07-25  Search: 数据恢复  点击:(465)  评论:(0)  加入收藏
电脑免费的数据恢复软件哪个好?
电脑经常会因为我们一些误操作导致数据丢失,比如一个不小心点击错误将数据给删除了,或者是清空了回收站发现里面还有数据需要使用,我们总是会因为各种各样的原因出现电脑数据丢...【详细内容】
2022-06-14  Search: 数据恢复  点击:(327)  评论:(0)  加入收藏
电脑误删文件恢复?用数据恢复软件解决
很多朋友可能因为不小心或者其他情况,导致电脑中重要文件丢失,其实这时候就算回收站也被再次清空,电脑文件还是可以恢复的,因为操作系统在删除文件的时候,只是将该文件占用的磁盘...【详细内容】
2022-01-18  Search: 数据恢复  点击:(289)  评论:(0)  加入收藏
▌简易百科推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  京东云开发者    Tags:向量数据库   点击:(4)  评论:(0)  加入收藏
原来 SQL 函数是可以内联的!
介绍在某些情况下,SQL 函数(即指定LANGUAGE SQL)会将其函数体内联到调用它的查询中,而不是直接调用。这可以带来显著的性能提升,因为函数体可以暴露给调用查询的规划器,从而规划器...【详细内容】
2024-04-03  红石PG  微信公众号  Tags:SQL 函数   点击:(3)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28    51CTO  Tags:NoSQL   点击:(13)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  dbaplus社群    Tags:数据库连接池   点击:(12)  评论:(0)  加入收藏
八个常见的数据可视化错误以及如何避免它们
在当今以数据驱动为主导的世界里,清晰且具有洞察力的数据可视化至关重要。然而,在创建数据可视化时很容易犯错误,这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可...【详细内容】
2024-03-26  DeepHub IMBA  微信公众号  Tags:数据可视化   点击:(6)  评论:(0)  加入收藏
到底有没有必要分库分表,如何考量的
关于是否需要进行分库分表,可以根据以下考量因素来决定: 数据量和负载:如果数据量巨大且负载压力较大,单一库单一表可能无法满足性能需求,考虑分库分表。 数据增长:预估数据增长...【详细内容】
2024-03-20  码上遇见你  微信公众号  Tags:分库分表   点击:(13)  评论:(0)  加入收藏
在 SQL 中写了 in 和 not in,技术总监说要炒了我……
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 &darr;select *...【详细内容】
2024-03-18  dbaplus社群    Tags:SQL   点击:(5)  评论:(0)  加入收藏
应对慢SQL的致胜法宝:7大实例剖析+优化原则
大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什...【详细内容】
2024-03-14  京东云开发者    Tags:慢SQL   点击:(4)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12    InfoQ  Tags:数据库   点击:(25)  评论:(0)  加入收藏
SQL优化的七个方法,你会哪个?
一、插入数据优化 普通插入:在平时我们执行insert语句的时候,可能都是一条一条数据插入进去的,就像下面这样。INSERT INTO `department` VALUES(1, &#39;研发部(RD)&#39;, &#39...【详细内容】
2024-03-07  程序员恰恰  微信公众号  Tags:SQL优化   点击:(19)  评论:(0)  加入收藏
站内最新
站内热门
站内头条