mysql通过binlog日志来恢复数据

简介

在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通过我们的备份文件来恢复,也只能恢复到 2016-11-19 09:30:00 这个时间点,而9.30分到10:30分这一个小时的数据恢复不了,这时候我们可以通过mysql的binlog日志来恢复没有备份到的这一小时的数据。

1、开启mysql的binlog日志(默认情况下没有开启)

#vim /etc/my.cnf下添加一行(也可以另外指定binlog日志的路径)
log-bin = mysql-bin

#mysql5.7默认情况下,binlog日志文件默认放在/usr/local/mysql/data/目录下

2、用mysqlbinlog可以查看binlog日志里的信息

./mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000003

3、根据位置恢复

#mysqlbinlog --start-position=134 --stop-position=330 mysql-binglog.000001 > /root/test1.txt

进入MYSQL导入

mysql> source /root/test1.txt

--start-position  起始位置

--stop-position  结束位置

4、根据日期

#./mysqlbinlog --start-date="2016-11-10 17:30:05"
--stop-date="2016-11-10 18:00:00"
mysql-binlog.000002  >
/root/test2.sql

mysql> source /root/test2.txt

--start-date 起始时间

--stop-date 结束时间

或者

#./mysqlbinlog --start-date="2016-11-10 17:30:05"
--stop-date="2016-11-10 18:00:00" mysql-binlog.000002 | ./mysql -uroot -padmin

将mysql-bin.000002日志文件中从2016-11-10 17:30:05到2016-11-10 18:00:00截止的sql语句导入到mysql中test

----如果有多个binlog文件,中间用空格隔开,打上完全路径

5、补充mysqldump备份

[[email protected] tmp]# /usr/local/mysql/bin/mysqldump -uroot -padmin test -l -F > /tmp/test.sql   #备份 数据库test到tmpl目录下的test.sql文件中

-l 表示读锁,在备份的过程中mysql不能写入数据,从而保证数据的完整性

-f 表示 flust logs,重新生成新的日志文件,当然也包括bin-log日志

./mysql -uroot -padmin test  -v -f < /tmp/test.sql   #通过/tmp/test.sql文件恢复test数据库

-v 查看导入的详细信息

-f 导入过程中遇到错误,跳过,并继续往下执行

时间: 2024-10-24 12:46:46

mysql通过binlog日志来恢复数据的相关文章

MySql通过二进制日志文件恢复数据

在<百度.阿里.腾讯如何承载PB级别大数据>的视频中了解到,大型网站的数据库每天都会定时的进行数据备份份.如果设置每天的0点进行数据备份,在两个数据备份周期期间数据库出现宕机情况,0点到宕机这个时间段的数据如何备份呢?在MySql中是通过数据库的二进制日志文件进行数据恢复的. MySql的二进制日志文件默认是关闭的,需要我们在MySql根目录下的my.ini文件中设置为开启状态.设置方式为在[mysqld]节点下,添加log-bin=mysql  binlog-do-db=spring,mys

MYSQL使用二进制日志来恢复数据

mysqlbinlog工具的使用,大家可以看MySQL的帮助手册.里面有详细的用, 在这个例子中,重点是--start-position参数和--stop-position参数的使用. ·--start-position=N 从二进制日志中第个位置等于N参量时的事件开始读. ·--stop-position=N 从二进制日志中第个位置等于和大于N参量时的事件起停止读. OK,现在开始,要启动二进制日志记录,要先在my.cnf / my.ini文件的mysqld里添加 log-bin=日志名 在这

MySQL通过binlog日志回滚数据

一.数据库在进行数据更改操作时,会出现数据误操作导致数据异常的情况,所以数据安全是重中至重,对于数据库服务,必须开启binlog日志服务,保证数据的安全,可逆回滚.二进制日志的格式有三种形式分别为ROW.Statement以及MiXED1.STATMENT模式:基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中. 优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一.初步了解binlogMySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. DDL-

MySQL抑制binlog日志中的BINLOG部分

MySQL通过binlog来记录整个数据的变更过程,因此我们只要有MySQL的binlog日志即可完整的还原数据库.MySQL binlog日志记录有3种不同的方式,即:STATEMENT,MIXED,ROW.对于不同的日志模式,生成的binlog有不同的记录方式.对于MIXED(部分SQL语句)和ROW模式是以base-64方式记录,会以BINLOG开头,是一段伪SQL,我们可以用使用base64-output参数来抑制其显示.本文对此给出了描述及演示. 有关mysqlbinlog的用法,请参

06 : mysql 的 binlog 日志 和slow慢日志 详解

mysql 的 binlog 日志 和slow慢日志 详解 mysql一般常用的日志有三种:1:error错误日志2: binlog日志3:slow日志 下面将详细解释这三种日志: 1.错误日志记录MySQL启动或工作过程中,数据库状态信息,默认就是开启的,数据路径下$hostname.err.也可以指定错误路径:log_error=/var/log/mysql3306.log 2.二进制binlog日志(1)他记录了什么?记录了所有的数据库修改类的命令:DDLDCLDML (2)二进制日志记录

mysql清理binlog日志

mysql的binlog日志过多过大,清理过程. 1.查看binlog日志 mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 13255920 | | mysql-bin.000002 | 143716 | | mysql-bin.000003 | 524288119 | |

mysql将bin-log日志文件转为sql文件

查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like '%log_bin%'; mysql打开bin-log日志后,mysql数据库的非查询操作会将记录保存到bin-log文件中.一般bin-log日志文件不能打开查看的,需要用到mysql的工具进行.假设/mysql/data/目录中存放着二进制文件mysql-bin.000011.需要将日志文件mysql-bin.000011中关于数据库ti

mysql开启binlog日志和慢查询日志

1)首先,为什么要开启binlog日志和慢查询日志呢? binlog日志会记录下数据库的所以增删改操作,当不小心删除.清空数据,或数据库系统出错,这时候就可以使用binlog日志来还原数据库,简单来说就是一个记录备份的东西 慢查询日志 slow_query_log,这个东西是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,然后就可以进行数据库或sql语句或程序上的优化,简单来说就是一个优化辅助工具 PS:binlog日志应该一直开着(因为你不知道数据库哪一天会崩掉,或者哪