mysql备份灵活恢复
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备份灵活恢复的更多相关文章
- 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 复 ...
- MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
本文目录: 1.安装xtrabackup 2.备份锁 3.xtrabackup备份原理说明 3.1 备份过程(backup阶段) 3.2 准备过程(preparing阶段) 3.3 恢复过程(copy ...
- MariaDB/MySQL备份和恢复(二):数据导入、导出
MariaDB/MySQL备份恢复系列: 备份和恢复(一):mysqldump工具用法详述 备份和恢复(二):导入.导出表数据 备份和恢复(三):xtrabackup用法和原理详述 1.导出.导入数据 ...
- 【MySQL】MySQL备份和恢复
一.为什么要备份数据 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种. 硬件故障 软件故障 自然灾害 黑客攻击 误操作 (占比最大) 所以, 为了在数据丢失之后能够 ...
- MySQL备份和恢复[1]-概述
备份类型 完全备份,部分备份 完全备份:整个数据集 部分备份:只备份数据子集,如部分库或表 完全备份.增量备份.差异备份 增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份 ...
- MySQL 备份和恢复 理论知识
为什么要备份 数据无价 制定备份策略的注意点 1:可容忍丢失多少数据 2:恢复需要在多长时间内完成 3:备份的对象 数据.二进制日志和InnoDB的事务日志.SQL代码(存储过 ...
- mysql备份和恢复
摘自:http://safe.it168.com/a2009/1108/805/000000805490.shtml 要备份数据库" phpbb_db_backup " #mysq ...
- mysql 备份和恢复的两条命令
压缩备份: 1.mysqldump -h localhost -u root -p dbname | gzip > dbname.sql.gz 压缩恢复: 1.gunzip < dbnam ...
- MySQL 备份和恢复数据
备份指定数据库的全部表或指定表 mysqldump -u user -h localhost -p [password] db_name[ tbl_name[,tbl_name.......]]> ...
随机推荐
- 抓取并解密HTTPS流量
WireShark Wireshark解密TLS数据流,从网上已有资料来看,主要是两种方式:一是服务端私钥直接解密,二是使用SSLKEYLOGFILE获取握手过程中的会话密钥信息进行解密. 这 ...
- WMI简介和Event驻留
WMI (Windows Management Instrumentation,Windows管理规范) 从Windows 2000开始被包含于操作系统后,就一直是Windows操作系统的一部分. ...
- MySQL数据备份/导出 创建用户及其删除
Mysql DCL 创建用户 create user '用户名'@'localhost(本机访问)/%(通配符任何ip地址都可访问本机) 分配权限 grant 权限 on 数据库.表名 to '用户名 ...
- GoJS 使用笔记
作为商业软件,GoJs很容易使用,文档也很完备,不过项目中没有时间系统地按照文档学习,总是希望快速入门使用,所以将项目中遇到的问题精简一下,希望对后来者有些帮助. 开始使用 这里先展示一个最简单的例子 ...
- 用 JuiceFS 备份 Nginx 日志可以这么简单
在我们线上的生产环境中要备份的东西很多,各种服务日志.数据库数据.用户上传数据.代码等等.用 JuiceFS 来备份可以节省你大量时间,我们会围绕这个主题写一系列的教程,整理出一套最佳实践,方便大家. ...
- 学习java知道这五个网站就够了
"这个国家的每个人都应该学习编程计算机,因为它教你如何思考." 当乔布斯几年前这么说时,他再次被证明是一个真正的有远见的人. 好吧,这很难反驳!如今,编程比以往任何时候都更加蓬勃发 ...
- RTP包中timestamp的间隔问题
概述 近期在和同事调试G729的编解码库时碰到一个语音质量的问题,问题产生的原因和RTP包中的时间戳设置有关,特此记录下来. 问题现象,1001和1002账号注册在fs,媒体设置为G729并通过fs中 ...
- [Java]Java中的自动包装
来源:https://www.cnblogs.com/cheapcrook/archive/2012/04/25/2470478.html 自动拆装箱(AutoBoxing) 是JDK1.5中新增加的 ...
- 安装python和pycharm,以及常见安装问题
目录 安装python 输入第一个python程序 安装python文本编辑器pycharm 执行main.py文件出现的问题 python编码规范 python是当前很常用的一门语言了,和Java, ...
- 案例三:shell统计ip访问情况并分析访问日志
题目要求 有日志 1.log,部分内容如下: 112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com"/secco ...