iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >利用Mysqlbinlog日志恢复数据库数据的操作指引
  • 838
分享到

利用Mysqlbinlog日志恢复数据库数据的操作指引

2024-04-02 19:04:59 838人浏览 独家记忆
摘要

下文给大家带来关于利用Mysqlbinlog日志恢复数据库数据的操作指引,感兴趣的话就一起来看看这篇文章吧,相信看完利用mysqlbinlog日志恢复数据库数据的操作指引对大家多少有点帮助吧。一、开启mys

下文给大家带来关于利用Mysqlbinlog日志恢复数据库数据的操作指引,感兴趣的话就一起来看看这篇文章吧,相信看完利用mysqlbinlog日志恢复数据库数据的操作指引对大家多少有点帮助吧。

一、开启mysql-binlog日志

在mysql配置文件my.cnf加上如下配置

[mysqld]

log-bin=mysql-bin

binlog_do_db=bin_test


重启mysql

service mysqld restart


二、备份数据库


1)先查看一下当前数据库情况及binlog日志情况:

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| infORMation_schema |

| mysql |

| test |

+--------------------+

3 rows in set (0.00 sec)


mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 | 106 | bin_test | |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


2)创建库及数据:bin_test


mysql> create database bin_test;

Query OK, 1 row affected (0.00 sec)


mysql> use bin_test;

Database changed

mysql> create table abc(id int(10) primary key auto_increment,name varchar(255));

Query OK, 0 rows affected (0.00 sec)


mysql> insert into abc(name) value('zhangsan');

Query OK, 1 row affected (0.00 sec)


mysql> insert into abc(name) value('lisi');

Query OK, 1 row affected (0.00 sec)


mysql> insert into abc(name) value('wangwu');

Query OK, 1 row affected (0.00 sec)


mysql> select * from abc;

+----+----------+

| id | name |

+----+----------+

| 1 | zhangsan |

| 2 | lisi |

| 3 | wangwu |

+----+----------+

3 rows in set (0.00 sec)


3)备份数据到/tmp/test.sql


[root@localhost ~]# whereis mysqldump

mysqldump: /usr/bin/mysqldump /usr/share/man/man1/mysqldump.1.gz

[root@localhost ~]# /usr/bin/mysqldump -uroot -p123456 bin_test > /tmp/test.sql


4)查看下binlog日志情况:


mysql> show binlog events in 'mysql-bin.000001';

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

| mysql-bin.000001 | 4 | Format_desc | 1 | 106 | Server ver: 5.1.73-log, Binlog ver: 4 |

| mysql-bin.000001 | 106 | Query | 1 | 197 | create database bin_test |

| mysql-bin.000001 | 197 | Query | 1 | 337 | use `bin_test`; create table abc(id int(10) primary key auto_increment,name varchar(255)) |

| mysql-bin.000001 | 337 | Intvar | 1 | 365 | INSERT_ID=1 |

| mysql-bin.000001 | 365 | Query | 1 | 471 | use `bin_test`; insert into abc(name) value('zhangsan') |

| mysql-bin.000001 | 471 | Intvar | 1 | 499 | INSERT_ID=2 |

| mysql-bin.000001 | 499 | Query | 1 | 601 | use `bin_test`; insert into abc(name) value('lisi') |

| mysql-bin.000001 | 601 | Intvar | 1 | 629 | INSERT_ID=3 |

| mysql-bin.000001 | 629 | Query | 1 | 733 | use `bin_test`; insert into abc(name) value('wangwu') |

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

9 rows in set (0.00 sec)


三、这时模拟误操作(删除数据库)


此时突然数据库损坏或者人为删除


mysql> drop database bin_test;


Query OK, 1 row affected (0.00 sec)


mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| test |

+--------------------+

3 rows in set (0.00 sec)


再查看下binlog日志有没有记录删库的操作:


mysql> show binlog events in "mysql-bin.000001";

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

| mysql-bin.000001 | 4 | Format_desc | 1 | 106 | Server ver: 5.1.73-log, Binlog ver: 4 |

| mysql-bin.000001 | 106 | Query | 1 | 197 | create database bin_test |

| mysql-bin.000001 | 197 | Query | 1 | 337 | use `bin_test`; create table abc(id int(10) primary key auto_increment,name varchar(255)) |

| mysql-bin.000001 | 337 | Intvar | 1 | 365 | INSERT_ID=1 |

| mysql-bin.000001 | 365 | Query | 1 | 471 | use `bin_test`; insert into abc(name) value('zhangsan') |

| mysql-bin.000001 | 471 | Intvar | 1 | 499 | INSERT_ID=2 |

| mysql-bin.000001 | 499 | Query | 1 | 601 | use `bin_test`; insert into abc(name) value('lisi') |

| mysql-bin.000001 | 601 | Intvar | 1 | 629 | INSERT_ID=3 |

| mysql-bin.000001 | 629 | Query | 1 | 733 | use `bin_test`; insert into abc(name) value('wangwu') |

| mysql-bin.000001 | 733 | Query | 1 | 822 | drop database bin_test |

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

10 rows in set (0.00 sec)


可以看到第20条的操作为删除数据库的操作。


四、此时数据库已经被完全破坏


1)使用mysqlbinlog命令进行恢复;首先在恢复前要确认正确的position起始值与终止值:

mysql> show binlog events in "mysql-bin.000001";

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

| mysql-bin.000001 | 4 | Format_desc | 1 | 106 | Server ver: 5.1.73-log, Binlog ver: 4 |

| mysql-bin.000001 | 106 | Query | 1 | 197 | create database bin_test |

| mysql-bin.000001 | 197 | Query | 1 | 337 | use `bin_test`; create table abc(id int(10) primary key auto_increment,name varchar(255)) |

| mysql-bin.000001 | 337 | Intvar | 1 | 365 | INSERT_ID=1 |

| mysql-bin.000001 | 365 | Query | 1 | 471 | use `bin_test`; insert into abc(name) value('zhangsan') |

| mysql-bin.000001 | 471 | Intvar | 1 | 499 | INSERT_ID=2 |

| mysql-bin.000001 | 499 | Query | 1 | 601 | use `bin_test`; insert into abc(name) value('lisi') |

| mysql-bin.000001 | 601 | Intvar | 1 | 629 | INSERT_ID=3 |

| mysql-bin.000001 | 629 | Query | 1 | 733 | use `bin_test`; insert into abc(name) value('wangwu') |

| mysql-bin.000001 | 733 | Query | 1 | 822 | drop database bin_test |

+------------------+-----+-------------+-----------+-------------+-------------------------------------------------------------------------------------------+

10 rows in set (0.00 sec)


此时我们已经确认“起始值”为创建库时的起始:106;"终止值"为drop库时的前一句的结束:733


2)使用mysqlbinlog进行恢复:

mysqlbinlog --no-defaults --start-position="106" --stop-position="733" /var/lib/mysql/mysql-bin.000001 |mysql -uroot -p

Enter passWord:


3)查看下数据是否恢复成功:


11mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| bin_test |

| mysql |

| test |

+--------------------+

4 rows in set (0.00 sec)


11mysql> select * from bin_test.abc;

+----+----------+

| id | name |

+----+----------+

| 1 | zhangsan |

| 2 | lisi |

| 3 | wangwu |

+----+----------+

3 rows in set (0.00 sec)


3)恢复成功


总结】:mysql备份和bin-log日志


备份数据:

mysqldump -uroot -p123456 bin_test -l -F '/tmp/test.sql'

-l:读(只能读取,不能更新)

-F:即flush logs,可以重新生成新的日志文件,当然包括log-bin日志


查看binlog日志:

mysql>show master status

如果数据较多,先导入之前备份数据:


mysql -uroot -p123456 bin_test -v -f </tmp/test.sql

-v查看导入的详细信息

-f是当中间遇到错误时,可以skip过去,继续执行下面的语句


恢复binlog-file二进制日志文件:

mysqlbinlog --no-defaults binlog-file | mysql -uroot -p123456


从某一(567)点开始恢复:

mysqlbinlog --no-defaults --start-position="567" mysql-bin.000001| mysql -uroot -p123456 test


先查好那一点(用more来查看)

[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000001 --start-position="794" --stop-position="1055" | more


然后恢复:

[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000001 --start-position="794" --stop-position="1055" | /usr/bin/mysql -uroot -p123456 test


重置binlog日志

mysql> reset master;

Query OK, 0 rows affected (0.01 sec)


mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 | 106 | | |

+------------------+----------+--------------+------------------+

mysql> flush logs;#关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。 

看了以上关于利用Mysqlbinlog日志恢复数据库数据的操作指引详细内容,是否有所收获。如果想要了解更多相关,可以继续关注我们的数据库板块。

您可能感兴趣的文档:

--结束END--

本文标题: 利用Mysqlbinlog日志恢复数据库数据的操作指引

本文链接: https://www.lsjlt.com/news/36748.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL binlog日志恢复数据详细操作步骤
    场景 遇到后台数据批量误删,需要进行数据恢复。 准备 确定需要恢复数据的时间段 2、查看是否开启了binlog (1)终端执行命令,连接mysql mysql -h地址 -P端口号 -u账号 -p 输入密码后回车即可连接成功 (2)执行如...
    99+
    2023-08-17
    数据库 sql mysql
  • 删除sqlserver数据库日志和没有日志的数据库的恢复办法
    这篇文章将为大家详细讲解有关删除sqlserver数据库日志和没有日志的数据库的恢复办法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、删除数据库日志文件...
    99+
    2024-04-02
  • Oracle数据库备份与恢复操作指南
    Oracle数据库备份与恢复操作指南 一、备份 使用RMAN备份整个数据库 RMAN是Oracle提供的用于备份和恢复数据库的管理工具,使用RMAN可以备份整个数据库,包括数据文件、控...
    99+
    2024-03-02
    oracle 恢复 备份
  • 阿里云日志恢复数据库怎么弄
    简介 在使用阿里云数据库时,有时候可能会遇到数据库崩溃或者误删除的情况,这时候就需要进行数据库的日志恢复。本文将介绍如何在阿里云上进行日志恢复数据库的操作步骤。步骤一:备份数据库在进行日志恢复之前,首先需要备份数据库。可以通过阿里云提供的备...
    99+
    2024-01-31
    阿里 怎么弄 数据库
  • SQLServer数据库误操作恢复的方法
    目录前言一、恢复数据实例1.创建初始数据2.保证数据恢复的前提条件3.模拟不小心误操作4.开始恢复二、恢复数据原理1.数据库文件类型2.使用bak恢复数据原理总结参考前言 在日常开发...
    99+
    2023-01-30
    SQLServer数据库恢复 SQLServer 恢复
  • 数据库日志的神奇世界:探索数据追溯和恢复
    日志类型的概述 数据库日志有多种类型,每种类型都记录不同类型的操作。最常见的类型包括: 重做日志 (REDO):记录对数据库所做的数据更改,允许在系统崩溃或数据丢失后重新应用这些更改。 回滚日志 (UNDO):记录数据的原始状态,允许在...
    99+
    2024-04-02
  • MySQL怎么使用二进制日志恢复数据库
    本篇内容主要讲解“MySQL怎么使用二进制日志恢复数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL怎么使用二进制日志恢复数据库”吧!一、二进制日志...
    99+
    2024-04-02
  • oracle数据库操作日志在哪里看
    oracle 数据库提供了以下方法进行操作日志查看:redo 日志: 提供对已提交事务的即时视图。归档日志: redo 日志的备份,用于恢复覆盖的日志文件。审计日志: 记录特定用户执行的...
    99+
    2024-05-13
    oracle
  • 怎么通过日志恢复MSSQL数据
    这篇文章将为大家详细讲解有关怎么通过日志恢复MSSQL数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、建立数据库和测试表 create da...
    99+
    2024-04-02
  • sql日志文件如何恢复数据
    要恢复数据,您可以在 SQL Server Management Studio 中执行以下步骤: 打开 SQL Server Ma...
    99+
    2024-04-22
    sql
  • MySQL使用binlog日志做数据恢复的案例
    这篇文章主要介绍了MySQL使用binlog日志做数据恢复的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL的binlog日志是MySQL日志中非常重要的一种日志...
    99+
    2023-06-14
  • 怎么用mysqlbinlog做基于时间点的数据恢复
    这篇文章将为大家详细讲解有关怎么用mysqlbinlog做基于时间点的数据恢复,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 mysql&g...
    99+
    2024-04-02
  • 利用MySQL的binlog恢复误删的数据库
    1 查看当前数据库内容并备份数据库 查看数据库信息: 备份数据库: [root@localhost ~]# mysqldump -u root -p t > /mnt/t.sqlEnter pass...
    99+
    2023-09-23
    数据库 mysql sql
  • mysql日志恢复数据的方法是什么
    MySQL的日志恢复数据方法主要有两种:基于二进制日志的恢复和基于事务日志的恢复。1. 基于二进制日志的恢复:- 首先,通过`mys...
    99+
    2023-09-22
    mysql
  • mysql通过binlog日志恢复误删数据
    1、先查看binlog功能是否开启 show variables like '%log_bin%'; log_bin为ON说明可以使用binlog恢复,如果为OFF说明没有开启binlog。 2、删...
    99+
    2023-09-06
    mysql 数据库
  • 利用python中pymysql操作MySQL数据库的新手指南
    目录一. pymysql介绍 二. 连接数据库的完整流程 1. 引入pymysql模块 2. 创建连接对象 3. 使用连接对象创建游标对象 4. 准备需要使用的sql语句 5. 使用...
    99+
    2024-04-02
  • 动手为王——利用logminer挖掘日志恢复误操作
    挖掘日志恢复误操作 1 介绍: LogMiner是Oracle数据库提供的一个工具,它用于分析重做日志和归档日志所记载的事务操作。 Logminer是oracle从8i开始提...
    99+
    2024-04-02
  • Python数据库操作的终极指南:成为数据库操作大师
    Python数据库操作的终极指南 在Python中操作数据库就像一顿美味的晚餐,你不仅要学会选择合适的工具,还要掌握烹饪的技巧。就像你是厨房的主人, SQLAlchemy库就是你的工具箱,它不仅可以帮助你轻松地连接到不同的数据库,如MyS...
    99+
    2024-02-07
    Python, 数据库操作, SQLAlchemy, CRUD, SQL, MySQL, PostgreSQL, SQLite
  • mysql数据库误删除后的数据恢复操作过程是怎样的
    这篇文章给大家介绍mysql数据库误删除后的数据恢复操作过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在日常运维工作中,对于mysql数据库的权限的规避,SQL审核优化、数...
    99+
    2024-04-02
  • 怎么通过日志文件恢复MySQL数据
    这篇文章主要介绍“怎么通过日志文件恢复MySQL数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么通过日志文件恢复MySQL数据”文章能帮助大家解决问题。1、找到最新的 binlog 文件进入 ...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作