热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nginxmysql还原_mysql数据库备份及其恢复

一、确保mysql开启了binlog日志功能在etcmy.cnf文件里的[mysqld]区块添加:#这个是存储的位置为mysql配置文件的位置log-binmysql

一、确保mysql开启了binlog日志功能

在/etc/my.cnf文件里的[mysqld]区块添加:

#这个是存储的位置为mysql配置文件的位置

log-bin=mysql-bin

然后重启mysql服务生效

二、创建数据库

先创建一个ops数据库

create database ops;

use ops;

创建一个customers表并写上表结构

create table customers(

id int not null auto_increment,

name char(20) not null,

age int not null,

primary key(id)

)engine=InnoDB;

查看创建好的表

desc customers;

116bc7086548e08cb6fc84863fa5face.png

表中插入数据:

insert into customers values(1,"wangbo","24");

insert into customers values(2,"guohui","22");

insert into customers values(3,"zhangheng","27");

检查插入数据:

select * from customers;

dc4327b3e508831d3a6ca54ca7d5e6da.png

三、进行数据库全量备份

mysqldump -uroot -p -B -F -R -x --master-data=2 ops|gzip >/alidata/mysql_bakcup/ops_$(date +%F).sql.gz

ls /alidata/mysql_bakup

ae6829bab53481597142812df14b29c3.png

参数说明:

-B: 指定数据库

-F:刷新日志

-R:备份存储过程等

-x:锁表

--master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置信息

四、再次插入数据

insert into customers values(4,"liupeng","21");

insert into customers values(5,"xiaoda","31");

insert into customers values(6,"fuaiai","26");

查看最新插入的数据

select * from customers;

ee5d627948a2e4bf868020d3601c1a5f.png

五、模拟误操作、删除ops数据库

drop database ops;

此时,全备之后到误操作时刻之间,用户写入的数据在binlog中,需要恢复出来!

查看全备之后新增的binlog文件

cd /alidata/mysql_bakcup

#解压出已经备份好的数据库

gzip -d ops_2019-04-23.sql.gz

ls

49366e9e39d32061538249084144d867.png

查看数据库变化的时刻

grep CHANGE ops_2019-04-23.sql

ea31810eea3978d83d5427ac912179e0.png

这是全备时候的binlog文件位置 mysql-bin.000006的第106行

因此在该文件之前的binlog文件中的数据都已经包含在这个全备的sql文件中了

移动到binlog文件,并导出sql文件,提出其中的drop语句

查看mysql数据存放目录,由如下信息可知在/var/lib/mysql目录下

ps -ef |grep mysql

8e64c0070b4d307c2817ecca0978e748.png

cd /var/lib/mysql

cp mysql-bin.000006 /alidata/mysql_bakcup/

cd /alidata/mysql_bakcup/

mysqlbinlog mysql-bin.000006 >006bin.sql #即将binlog日志转化为可正常导入的sql文件

fc3e9111282f5928585a8c47c4ad37ec.png

vim 006bin.sql 删除里面drop语句

注意:在恢复全备数据之前必须将binlog文件移出,否则恢复过程中,会继续写入语句到binlog,最终导致增量恢复数据部分变的比较混乱

六、恢复数据

mysql -uroot -p

查看数据库,看看ops库在不在

show databases

d4b779f7935e2043aaec190e6ba456b6.png

use ops;

select * from customers;

#此时恢复了全备时刻时候的数据

db92bab859055b58013b7edff82afae7.png

接着,使用006bin.sql文件恢复全备时刻到删除ops数据库之前,新增的数据

mysql -uroot -p ops <006bin.sql

再次查看数据库&#xff0c;发现备份到删除数据库之前的那部分数据也恢复了&#xff01;

select * from customers;

d62b82350b0078adfef1add821a8dc2b.png

以上就是mysql数据库增量数据恢复的实例过程&#xff01;

最后总结几点&#xff1a;

1)本案例适合认为SQL语句造成的误操作或者没有主从复制等热备情况宕机时的修复

2)恢复条件为mysql要开启binlog日志功能&#xff0c;并且要全备和增量所有数据

3)恢复时建议对外定制更新&#xff0c;即禁止更新数据库

4)先恢复全量&#xff0c;然后把全备时刻点以后增量日志&#xff0c;按顺序恢复成SQL文件&#xff0c;然后把文件中有问题的SQL语句删除&#xff0c;在恢复到数据库



推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
author-avatar
冰的简笔画
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有