1、崩溃恢复:

突然断电、宕机,导致mysql无法正常启动:

(1) 关闭数据库。

(2) Vim /etc/my.cnf  添加:innodb_force_recovery=1   默认为0。

1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。

2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。

3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。

4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。

5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。

6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

(3)  启动mysql,如果启动失败则依次按照1-6顺序配置innodb_force_recovery参数

(4)  做全量备份。

(5) 删除ib_logfile0、ib_logfile1、ibdata1

2、利用二进制日志恢复(前提是二进制日志都在):

(1)利用时间或position进行恢复:

mysqlbinlog --start-positon=  --stop-positon= mysql-bin.000022 | mysql -uroot -p

mysqlbinlog --start-datetime="2016-9-25 22:01:08" --stop-datetime="2019-9-25 22:09:46" | mysql -uroot -p

(2)利用二进制日志转换成为.sql文件恢复;

mysqlbinlog --base64-output=decode-rows -v mysql-bin.000012 > ~/bin.sql

mysql -uroot -p < ~/bin.sql

3、利用历史备份+二进制日志还原:

(1)导入历史备份数据:

mysql -uroot -p123456 < all.sql

这时已经还原为备份时的数据库状态。

(2)找到历史备份数据的时间点,比如历史数据是昨晚0点备份的,那么就是0点。然后从二进制日志中找到昨晚0点的数据,利用mysqlbinlog命令进行还原。

mysqlbinlog --start-positon=  --stop-positon= mysql-bin.000022 | mysql -uroot -p

mysqlbinlog --start-datetime="2016-9-25 22:01:08" --stop-datetime="2019-9-25 22:09:46" | mysql -uroot -p

4、没有备份的历史数据的时候,可以只利用二进制日志恢复。前提是二进制日志必须都存在。

(1)做一个slave机,并启动服务。

(2)找到已经删除了或者清空了表的建表二进制日志名称。如:该表建表语句在mysql-bin.000009。找到删除操作前的position,也就是DROP或TRUNCATE语句前一个的position,如:语句在:mysql-bin.000061   position在73154

(3)在slave机上创建好数据库,然后change master to master_log_file='mysql-bin.000009',master_log_pos=107,master_port=3306;

START SLAVE UNTIL MASTER_LOG_FILE='mysql-bin.000061',MASTER_LOG_POS=73154;    开始启动slave并指定二进制日志的终点。

mysql恢复数据的更多相关文章

  1. mysql 恢复数据时中文乱码

    mysql恢复数据时中文乱码,解决办法. 用source命令导入mysql数据库怎么设置中文编码 1.导出数据时指定编码在导出mysql sql执行文件的时候,指定一下编码格式: mysqldump ...

  2. mysql 恢复数据

    前提:保存了需要恢复数据库的文件 .frm 和 .ibd 文件 条件:InnoDB 类型的 恢复表结构1.新建一个数据库--新建一个表,表名和列数和需要恢复数据库相同2.停止mysql服务器 serv ...

  3. mysql学习(4)-mysqldump备份和恢复数据

    背景 最近在公司做数据迁移方面的工作,使用mysql数据库在测试环境模拟数据迁移,在迁移测试的过程中需要做数据备份和恢复 mysql数据备份和恢复比较简单,可以选择mysqldump工具,这里简单提一 ...

  4. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  5. 不小心删除数据--利用MySQL的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

  6. 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

    参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...

  7. mysql使用二进制日志恢复数据

    一.恢复到某个二进制文件 1.开启二进制日志 在mysqld的配置节点下添加如下配置 log-bin="E:/Mysql57BinLog/binlog"(windows下的路径,l ...

  8. MySql在生产环境中是用mysqldump还是xtrabackup备份和恢复数据

    如题,究竟该使用mysqldump还是xtrabackup,要说用,两个都能备份,都支持热备,但是生产环境我们要考虑的是效率,就是不管备份还是恢复,都要快,要稳定. 之前我在维护mysql数据库的时候 ...

  9. MySQL学习(三)主备分库分表和恢复数据 --- 2019年2月

    1.MySQL主备切换 readonly 设置对超级(super)权限是无效的,而用于同步更新的线程,就拥有超级权限. 建议在做主备数据库的时候,将备用数据库设置为只读.(反向用readonly来判断 ...

随机推荐

  1. python __builtins__ bytearray类 (7)

    7.'bytearray', 返回一个新字节数组.这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256. class bytearray(object) | byte ...

  2. 分布式集群环境下,如何实现session共享三(环境搭建)

    这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...

  3. oracle 10g standby 设置

    ##########sample alter system set log_archive_dest_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=bo ...

  4. Camera和 tris,verts的优化

    Unity的Camera组件有很多可调节的参数,当需要做优化的时候,stats面板中的tris和verts这两个重点项都与Camera组件的参数有很大关系,有些参数的意义Unity手册说得不够详细,经 ...

  5. 动手实现 Redux(四):共享结构的对象提高性能

    接下来两节某些地方可能会稍微有一点点抽象,但是我会尽可能用简单的方式进行讲解.如果你觉得理解起来有点困难,可以把这几节多读多理解几遍,其实我们一路走来都是符合“逻辑”的,都是发现问题.思考问题.优化代 ...

  6. spring boot druid mybatis多数据源

    一.关闭数据源自动配置(很关键) @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) 如果不关闭会报异常:o ...

  7. 新建cordova应用

    使用命令行(本例命令行均使用as或webstrom的命令行),在任意目录输入以下命令新建cordova应用 cordova create capp1 com.cesc.ewater.capp1 其中c ...

  8. python中的格式化字符

    python中的格式化字符在python中我们会遇到一个问题,问题是如何输出格式化的字符串.我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据 ...

  9. ios app跳转拨打电话界面,调用拨打电话功能

    DNLogFUNC //两种方法都可以用 //这种据说是可以上appstore NSURL *phoneURL = [NSURL URLWithString:[NSString stringWithF ...

  10. Android学习笔记(十八) Socket

    Socket在计算机网络中的概念是指套接字,包含IP地址和端口号.在Java编程中Socket是一个类,用来实现数据传输(同样可以理解为“套接字”).传输的协议包括UDP和TCP,前者为不可靠的无连接 ...