mysql备份灵活恢复

服务上线遇到一个问题,开始操作前做了全库备份,但是没有做要操作的库备份,如果操作过程出现失败情况需要回退时,直接用全备文件做全库恢复很不妥当。

通过mysql的全备份文件,可以比较灵活的筛选出某个单独的 库或者单独的表的备份内容,从而灵活的恢复。同时,也可以直接用全备文件恢复单独的库。下面记录一下这些操作方式。

从全备份文件中恢复指定库

在/opt/目录下有一个full_bak.sql备份文件,对当前数据库做了全备

[root@node1 opt]# ls
full-bak.sql mysql_fulldump-2019-03-17.sql

数据库中原来的 pay 数据库被我删除,现在从上面的全库备份文件中单独恢复pay。 执行指令如下:

  • 登录数据库创建同名数据库
create database pay;
  • 从全备文件恢复pay
[root@node1 opt]# mysql -u root -p pay --one-database < full-bak.sql

--one-database选项可以使用 -o 参数

  • 登录数据库查看pay库数据
mysql> use pay;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+-----------------+
| Tables_in_pay |
+-----------------+
| ws_pay_order |
| ws_wxpay_notify |
+-----------------+
2 rows in set (0.01 sec) mysql> select count(*) from ws_pay_order;
+----------+
| count(*) |
+----------+
| 185 |
+----------+
1 row in set (0.00 sec)

指定恢复的库需要先在数据库中创建同名数据库

从全备文件中筛选数据库或数据表

还有一种方式,通过把备份文件中的备份语句筛选出来导入新的SQL文件,使用新的SQL文件来恢复指定的库或者表。

下面用使用比较大的备份文件mysql_fulldump-2019-03-17.sql进行筛选

使用正则表达式将备份文件中的 mall库筛选出来:

[root@node1 opt]# sed -n '/^-- Current Database: `mall`/,/^-- Current Database: `/p' mysql_fulldump-2019-03-17.sql > mall.sql

查看筛选文件如下:

[root@node1 opt]# ls
full-bak.sql mall.sql mysql_fulldump-2019-03-17.sql
[root@node1 opt]# du -sh mall.sql
345M mall.sql

上面这种方式筛选的备份语句,把建库和建表语句都找出来了,所以可以直接执行mysql指令进行数据导入恢复。

  • 恢复mall数据
[root@node1 opt]# mysql -uroot -p < mall.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| admin |
| information_schema |
| mall |
| mysql |
| pay |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.00 sec)

从备份文件中筛选某个表的备份语句进行单表恢复

接着上面的恢复内容,将pay库中的一个表删除,然后从备份文件中将该表的备份语句筛选出来进行导入恢复


Database changed
mysql> show tables;
+-----------------+
| Tables_in_pay |
+-----------------+
| ws_pay_order |
| ws_wxpay_notify |
+-----------------+
2 rows in set (0.00 sec) mysql> drop table ws_pay_order;
Query OK, 0 rows affected (0.15 sec)

筛选表的备份分为两步,第一步先找到该表ws_pay_order的表结构,正则表达式如下:


[root@node1 opt]# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `ws_pay_order`/!d;q' full-bak.sql > ws_pay_order.sql # 表结构重定向至ws_pay_order.sql,随后将insert语句追加到该文件中:如下 [root@node1 opt]# grep 'INSERT INTO `ws_pay_order`' full-bak.sql >> ws_pay_order.sql # 此时表的备份文件被筛选出来
  • 恢复数据
mysql> source /opt/ws_pay_order.sql;

还有另一种方式来做匹配,和匹配数据库一样,执行指令如下:

[root@node1 opt]# sed -n -e '/CREATE TABLE.*`ws_pay_order`/ ,/UNLOCK TABLES/p' full-bak.sql > ws_pay_order.sql

#导入方式与上面一样

mysql备份灵活恢复的更多相关文章

  1. MariaDB/MySQL备份和恢复(一):mysqldump工具用法详述

    本文目录:1.备份分类2.备份内容和备份工具3.mysqldump用法详述 3.1 语法选项 3.1.1 连接选项 3.1.2 筛选选项 3.1.3 DDL选项 3.1.4 字符集选项 3.1.5 复 ...

  2. MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述

    本文目录: 1.安装xtrabackup 2.备份锁 3.xtrabackup备份原理说明 3.1 备份过程(backup阶段) 3.2 准备过程(preparing阶段) 3.3 恢复过程(copy ...

  3. MariaDB/MySQL备份和恢复(二):数据导入、导出

    MariaDB/MySQL备份恢复系列: 备份和恢复(一):mysqldump工具用法详述 备份和恢复(二):导入.导出表数据 备份和恢复(三):xtrabackup用法和原理详述 1.导出.导入数据 ...

  4. 【MySQL】MySQL备份和恢复

    一.为什么要备份数据 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种. 硬件故障 软件故障 自然灾害 黑客攻击 误操作 (占比最大) 所以, 为了在数据丢失之后能够 ...

  5. MySQL备份和恢复[1]-概述

    备份类型 完全备份,部分备份 完全备份:整个数据集 部分备份:只备份数据子集,如部分库或表 完全备份.增量备份.差异备份 增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份 ...

  6. MySQL 备份和恢复 理论知识

    为什么要备份 数据无价   制定备份策略的注意点 1:可容忍丢失多少数据     2:恢复需要在多长时间内完成     3:备份的对象   数据.二进制日志和InnoDB的事务日志.SQL代码(存储过 ...

  7. mysql备份和恢复

    摘自:http://safe.it168.com/a2009/1108/805/000000805490.shtml 要备份数据库" phpbb_db_backup " #mysq ...

  8. mysql 备份和恢复的两条命令

    压缩备份: 1.mysqldump -h localhost -u root -p dbname | gzip > dbname.sql.gz 压缩恢复: 1.gunzip < dbnam ...

  9. MySQL 备份和恢复数据

    备份指定数据库的全部表或指定表 mysqldump -u user -h localhost -p [password] db_name[ tbl_name[,tbl_name.......]]> ...

随机推荐

  1. 汇聚优质AR应用开发者,技术助力AR领域繁荣生态

    本文分享于HMS Core开发者论坛<EasyAR--汇聚优质AR应用开发者,技术助力AR领域繁荣生态>采访文字稿 EasyAR空间计算平台为应用开发者提供稳定建图.定位能力和完善工具链, ...

  2. 学习OMO游戏管理驾驶舱的设计

    2019年第1季度,Smartbi帮助合作伙伴开发了一个销售管理沙盘游戏(OMO),在第一个版本中主要精力放在游戏的后台过程逻辑上(基于电子表格的报表和回写能力),并没有把Smartbi的最强项--数 ...

  3. Linux性能优化实战CPU篇之软中断(三)

    一.软中断 1,中断的定义 a>定义 举例:你点了一份外卖,在无法获知外卖进度的情况下,配送员送外卖是不等人的,到了发现没人取会直接走,所以你只能苦苦等着,时不时去门口看送到没有,无法干别的事情 ...

  4. 3rd S-curve velocity profile

    3rd S-curve  (1) (2) (3) (4) 完整的三次S曲线包括上面的七个阶段.前面三个阶段为加速阶段,从初始速度Vs加速到Vmax: (5) 整个加速阶段的位移为: (6) 后面三个阶 ...

  5. AHUACM寒假集训I(基础数据结构+串串)

    H.超级钢琴 luoguP2048 题目大意: 求出一个长N序列中所有长度在L到R的子序列中序列和最大的K个,并求这K个的和 思路: 暴力的话可以求出所有满足要求的子序列然后排序,然后显然会T. 所以 ...

  6. Python:HTTP请求头headers信息的查询

    GET和POST请求后会返回一个response对象,可通过key.values等访问字典中元素的方式来访问该response对象headers中的各种属性 r=requests.get(url,he ...

  7. 获取HTML中所有图片的 URL

    /// <summary> /// 获取HTML中所有图片的 URL /// </summary> /// <param name="strHtml" ...

  8. Ajax 实战(一)

    目录 Ajax 实战(一) 简介 入门案例 基于Ajax进行登录验证 HTTP请求编码格式和报文 Content-Type=application/x-www-form-urlencoded Cont ...

  9. LeetCode-268-丢失的数字

    丢失的数字 题目描述:给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数. 进阶: 你能否实现线性时间复杂度.仅使用额外常数空间的算法解 ...

  10. C# HttpClient类库

    示例代码: 1 using System.Net.Http; 2 using System.Net.Http.Headers; 3 using System.Threading.Tasks; 4 5 ...