Linux上通过binlog文件恢复mysql数据库详细步骤

yizhihongxing

下面是本文的完整攻略:

1. 前置条件

  • 拥有一个已经安装好的 MySQL 数据库,且当前数据库需要启用 binlog 功能。

2. 恢复步骤

步骤 1:获取需要恢复的 binlog 文件和对应的位置信息

  • 执行以下命令获取所有的 binlog 文件列表:
$ ll /var/lib/mysql | grep -E '^mysql-bin'
  • 查阅以下命令获取对应的位置信息,其中的 mysql-bin.00000x 具体对应到上一步中找到的 binlog 文件:
$ mysqlbinlog /var/lib/mysql/mysql-bin.00000x | sed -n '1p;$p'

上述命令中,1p 表示输出第一行,也就是所需 binlog 文件所对应的位置点,而 $p 表示输出最后一行,也就是 binlog 文件中最后一条记录的位置点。

记录下来这两个位置点的值,它们将在后面的步骤中被用到。

步骤 2:停止 MySQL 服务

  • 执行以下命令停止 MySQL 服务:
$ service mysqld stop
  • 这一步的目的是确保在后续操作时,不会有与 MySQL 数据库文件造成冲突的进程。

步骤 3: 导出数据

  • 通过执行以下命令将刚刚记录下来的 binlog 文件从 MySQL 数据库中导出来:
$ mysqlbinlog --start-position=<恢复起始点> --stop-position=<恢复结束点> /var/lib/mysql/mysql-bin.00000x > /home/mysql/mybinlog.sql

上述命令中,<恢复起始点><恢复结束点> 分别为上一步中获取到的起始位置点和结束位置点。

  • 导出的数据存储在 /home/mysql/mybinlog.sql 文件中。

步骤 4:清空 MySQL 数据库

  • 在执行下一步操作前,需要将当前 MySQL 数据库中的数据全部清空,以便进行恢复操作。
$ rm -rf /var/lib/mysql/*

步骤 5: 恢复数据

  • 执行以下命令将导出的数据恢复到 MySQL 数据库中:
$ mysqlbinlog --no-defaults --database=<数据库名称> /home/mysql/mybinlog.sql | mysql

上述命令中,<数据库名称> 为需要进行恢复操作的数据库名称。

  • 至此,操作已经完成。重启 MySQL 服务即可。

示例

假设当前需要恢复的目标数据库名为 testdb,并且当前已经备份好了这个数据库的 binlog 文件。我们将使用以下示例来演示恢复过程:

  • binlog 文件列表如下:
$ ll /var/lib/mysql | grep -E '^mysql-bin'
-rw-rw---- 1 mysql mysql 98304 Apr 18 18:22 mysql-bin.000001
-rw-rw---- 1 mysql mysql 98304 Apr 18 18:23 mysql-bin.000002
-rw-rw---- 1 mysql mysql 98304 Apr 18 18:24 mysql-bin.000003
-rw-rw---- 1 mysql mysql 98304 Apr 18 18:25 mysql-bin.000004
-rw-rw---- 1 mysql mysql 98304 Apr 18 18:26 mysql-bin.000005
  • 获取对应的位置点信息:
$ mysqlbinlog /var/lib/mysql/mysql-bin.000001 | sed -n '1p;$p'
#191008 14:21:28 server id 1  end_log_pos 120      Start: binlog v 4, server v 5.6.49-log created 191008 14:21:28 at startup
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
#191008 14:21:31 server id 1  end_log_pos 200      Query   thread_id=23    exec_time=0     error_code=0
SET TIMESTAMP=1570546891/*!*/;
SET @@session.pseudo_thread_id=23/*!*/;
...
#191008 14:26:51 server id 1  end_log_pos 65431    Query   thread_id=23    exec_time=0     error_code=0
SET TIMESTAMP=1570547211/*!*/;
SET @@session.pseudo_thread_id=23/*!*/;

$ mysqlbinlog /var/lib/mysql/mysql-bin.000005 | sed -n '1p;$p'
#191008 16:19:51 server id 1  end_log_pos 120      Start: binlog v 4, server v 5.6.49-log created 191008 16:19:51 at startup
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
#191008 16:19:55 server id 1  end_log_pos 200      Query   thread_id=23    exec_time=0     error_code=0
SET TIMESTAMP=1570553995/*!*/;
SET @@session.pseudo_thread_id=23/*!*/;
...
#191008 16:26:06 server id 1  end_log_pos 65431    Query   thread_id=23    exec_time=0     error_code=0
SET TIMESTAMP=1570554366/*!*/;
SET @@session.pseudo_thread_id=23/*!*/;
  • 使用如下命令导出 binlog 文件中的数据:
$ mysqlbinlog --start-position=120 --stop-position=65431 /var/lib/mysql/mysql-bin.000004 > /home/mysql/mybinlog.sql
  • 清空 MySQL 数据库:
$ rm -rf /var/lib/mysql/*
  • 恢复数据:
$ mysqlbinlog --no-defaults --database=testdb /home/mysql/mybinlog.sql | mysql
  • 重启 MySQL 服务即可:
$ service mysqld start

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux上通过binlog文件恢复mysql数据库详细步骤 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 初识NoSQL NoSql数据库入门 NoSql数据库基础知识

    初识NoSQL NoSQL是什么 NoSQL,指的是“非关系型数据库”,是相对于关系型数据库而言的。传统的关系型数据库使用SQL语言作为数据操作的标准,而NoSQL则使用其他的数据存储和查询机制。 NoSQL的特点 NoSQL数据库具有以下几个特点: 高度可扩展:采用了分布式的存储方式,可以通过添加节点来扩展存储能力。 架构灵活:不需要像关系型数据库那样使用…

    database 2023年5月22日
    00
  • SQL 删除重复项

    当我们在SQL表中有重复记录时,我们可能需要删除这些重复项。以下是一些实用的SQL删除重复项的方法: 方法1:使用DISTINCT 使用SELECT DISTINCT语句选择所有非重复记录,并将它们插入到新表中,然后将旧表重命名并将新表重命名为旧表名称。如下所示: — 将DISTINCT查询结果插入到新表中 SELECT DISTINCT * INTO n…

    database 2023年3月27日
    00
  • C#数据库操作的示例详解

    C#数据库操作的示例详解 目录 概述 使用前准备工作 连接数据库 执行 SQL 语句 数据读取 数据插入、更新、删除 示例说明 示例 1:查询表中所有数据 示例 2:插入数据 结论 概述 在 C# 编程中,与数据库的交互是非常常见的。本篇文章将介绍如何使用 C# 连接数据库、执行 SQL 语句,以及如何进行数据读取、插入、更新、删除等操作。 使用前准备工作 …

    database 2023年5月21日
    00
  • oracle 批量删除表数据的几种方法

    Oracle 批量删除表数据的几种方法 在 Oracle 数据库中,我们可以使用以下几种方法批量删除表数据: TRUNCATE TABLE DELETE 通过 PL/SQL 编写存储过程实现删除 1. TRUNCATE TABLE TRUNCATE TABLE 是一种快速删除表数据的方法,其会直接清空表中的所有数据。但是, TRUNCATE TABLE 操作…

    database 2023年5月21日
    00
  • MyBatis多表关联查询的实现示例

    下面是关于”MyBatis多表关联查询的实现示例”的完整攻略。 标题 MyBatis多表关联查询的实现示例 简介 在MyBatis框架中,多表关联查询是非常常见的,本文将介绍如何使用MyBatis实现多表关联查询。 数据准备 在实现多表关联查询之前,我们需要先准备好测试数据。假设我们有两张表:学生表(student)和班级表(class),并且学生表中有一个…

    database 2023年5月22日
    00
  • Mysql 8.0 实现创建用户,指定用户只能访问指定的数据库中的表

    最近在做公司项目的过程中,出现了这样的需求。第三方系统需要将数据写到我们的业务系统中,由于目前这些数据没有实际的使用场景,在讨论下,为简单快捷,选择第二种方案,即不书写接口,第三方系统通过数据库直接将数据写入到业务系统的数据库中。但是呢又不能将ROOT用户分配给第三方,所以在数据库建立私有用户,指定用户只能访问指定的数据库中的表。 我们的数据库版本 MySQ…

    MySQL 2023年4月11日
    00
  • MySQL 数据查重、去重的实现语句

    当我们在处理大量数据时,经常会遇到数据重复或者需要去除重复数据的情况。MySQL 作为一种常用的数据库管理软件,提供了多种方法去重,本文将会讲解三种 MySQL 数据查重、去重的实现语句。 一、使用 Distinct 去重 Distinct 可以去除 SELECT 关键字之后所选结果集中的重复数据。Distinct 只返回不同的值,并且返回值的顺序为第一次出…

    database 2023年5月22日
    00
  • oracle 服务启动,关闭脚本(windows系统下)

    下面是完整的“oracle 服务启动,关闭脚本(windows系统下)”攻略。 Oracle服务启动、关闭脚本(Windows系统下) 背景 在Windows系统下,Oracle服务默认是以自动启动的方式安装的。但有时候在系统维护、升级、重启等操作过程中需要手动启动或关闭服务。本文将介绍Oracle服务的启动、关闭脚本,方便管理员快速操作。 前提条件 此脚本…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部