介绍
这篇文章将为大家详细讲解有关MySQL如何实现恢复单库或单表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强> 1。如何恢复单库或单表强>
前面文章有介绍过MySQL的备份与恢复。可能我们每个数据库实例中都不止一个库,一般备份都是备份整个实例,但恢复需求又是多种多样的,比如说我想只恢复某个库或某张表,这个时候应该怎么操作呢?
如果你的实例数据量不大,可以在另外一个环境恢复出整个实例,然后再单独备份出所需库或表用来恢复。不过这种方法不够灵活,并且只适用数据量比较少的情况。
其实从全备中恢复单库还是比较方便的,有个——一个数据库参数可以指定单库恢复、下面来具体演示下:
#查看及备份所有库 mysql>显示数据库; +--------------------+ | |数据库 +--------------------+ | information_schema | mysql | | | performance_schema | | sbt | | sys | | | testdb | testdb2 | +--------------------+ ,mysqldump -uroot -pxxxx - r - e——单独的事务——所有数据库比;all_db.sql #删除testdb库并进行单库恢复 mysql>减少数据库testdb; 查询好了,36行影响(2.06秒) #貌似恢复前testdb库不存在的话要手动新建 mysql -uroot -pxxxx——一个数据库testdb & lt;all_db。sql
除了上述方法外,恢复单库或单表还可以采用手动筛选的方法。这个时候Linux下大名鼎鼎的sed和grep命令就派上用场了,我们可以利用这两个命令从全备中筛选出单库或单表的语句,筛选方法如下:
#从全备中恢复单库 sed - n & # 39;/^——当前数据库:testdb/,/^——当前的数据库:“/p # 39;all_db。sql在;testdb.sql #筛选出单表语句 猫all_db。sql | sed - e & # 39;/?{H;美元! d;} & # 39;- e & # 39; x/创建表的test_tb/! d;提问# 39;比;/tmp/test_tb_info.sql 猫all_db。sql | grep,忽略大小写& # 39;插入“test_tb”& # 39;比;/tmp/test_tb_data.sql
, <强> 2。小心有坑强>
对于上述手动筛选来恢复单库或单表的方法,看起来简单方便,其实隐藏着一个小坑,下面我们来具体演示下:
#备份整个实例 ,mysqldump -uroot -pxxxx - r - e——单独的事务——所有数据库比;all_db.sql #手动备份下test_tb然后删除test_tb mysql>创建表test_tb_bak像test_tb; 查询好,0行影响(0.03秒) mysql>从test_tb插入test_tb_bak select *; 查询好,4行影响(0.02秒) 记录:4重复:警告:0 mysql>删除表test_tb; 查询好,0行影响(0.02秒) #从全备中筛选test_db建表及插数据语句 猫all_db。sql | sed - e & # 39;/?{H;美元! d;} & # 39;- e & # 39; x/创建表的test_tb/! d;提问# 39;比;test_tb_info.sql 猫all_db。sql | grep,忽略大小写& # 39;插入“test_tb”& # 39;比;test_tb_data.sql #查看得到的语句貌似没问题 猫test_tb_info.sql 删除表如果存在“test_tb”;/* !40101集@saved_cs_client=@@character_set_client */;/* !40101集character_set_client=utf8 */; 创建表“test_tb”( inc_id int (11) NOT NULL AUTO_INCREMENT评论& # 39;自增主键& # 39;, col1 int(11)非空, col2 varchar(20)默认为空, “col_dt”datetime默认为空, “create_time”默认时间戳NOT NULL CURRENT_TIMESTAMP评论& # 39;创建时间& # 39;, “update_time”默认时间戳NOT NULL CURRENT_TIMESTAMP> #备份文件开的头 ——MySQL 10.13 Distrib 5.7.23转储,Linux (x86_64) -- ——主持人:localhost数据库: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ——服务器版本5.7.23-log/* !40101集@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/* !40101集@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/* !40101集@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/* !40101集名称utf8 */;/* !40103集@OLD_TIME_ZONE=@@TIME_ZONE */;/* !40103集TIME_ZONE=& # 39; + 0 # 39;*/; 注意上面两行/* !40014集@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS UNIQUE_CHECKS=0 */;/* !40014集@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS FOREIGN_KEY_CHECKS=0 */;/* !40101集@OLD_SQL_MODE=@@SQL_MODE SQL_MODE=& # 39; NO_AUTO_VALUE_ON_ZERO& # 39;*/;/* !40111集@OLD_SQL_NOTES=@@SQL_NOTES SQL_NOTES=0 */; #备份文件结尾/* !40103集TIME_ZONE=@OLD_TIME_ZONE */;/* !40101集SQL_MODE=@OLD_SQL_MODE */;/* !40014集FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/* !40014集UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/* !40101集CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/* !40101集CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/* !40101集COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;/* !40111集SQL_NOTES=@OLD_SQL_NOTES */; ——转储完成> #清空test_db表数据 mysql>截断表test_tb; 查询好,0行影响(0.02秒) #文件开头增加时区声明 vim test_tb_data.sql 设置会话TIME_ZONE=& # 39; + 0 # 39;; 插入“test_tb”值(1001 & # 39;dsfs& # 39;, & # 39; 2020-08-04 12:12:36& # 39;, & # 39; 2020-09-17 06:19:27& # 39;, & # 39; 2020-09-17 06:19:27& # 39;), (1002 & # 39;vfsfs& # 39;, & # 39; 2020-09-04 12:12:36& # 39;, & # 39; 2020-09-17 06:19:27& # 39;, & # 39; 2020-09-17 06:19:27& # 39;), (1003,& # 39;adsfsf& # 39;, NULL, & # 39; 2020-09-17 06:19:27& # 39;, & # 39; 2020-09-17 06:19:27& # 39;), (1004 & # 39;walfd& # 39;, & # 39; 2020-09-17 14:19:27& # 39;, & # 39; 2020-09-17 06:19:27& # 39;, & # 39; 2020-09-18 07:52:13& # 39;); #执行恢复并比对发现数据正确 mysql>从test_tb select *; + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + | inc_id | col1 | col2 | col_dt | create_time | update_time | + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + | 1 | 1001 | dsf | 2020-08-04 12:12:36 | 2020-09-17 14:19:27 | 2020-09-17 14:19:27 | | 2 | 1002 | vfsfs | 2020-09-04 12:12:36 | 2020-09-17 14:19:27 | 2020-09-17 14:19:27 | null null null null null null null null null null null null null null nullMySQL如何实现恢复单库或单表