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

下面是本文的完整攻略:

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日

相关文章

  • redis debug环境搭建过程详解(使用clion)

    Redis Debug环境搭建过程详解(使用CLion) 概述 Redis Debug环境搭建可以帮助开发人员更方便地定位和解决Redis的问题。本文将介绍使用CLion工具来搭建Redis Debug环境的过程。 前置条件 在进行Redis Debug环境搭建之前,需要满足以下条件: 安装对应平台的CLion工具。 配置好Redis源代码目录。 安装好Re…

    database 2023年5月22日
    00
  • 使用MySQL MySqldump命令导出数据时的注意事项

    当使用MySQL MySqldump命令导出数据时,需要注意以下几点: 1. 确定导出的数据库 在使用MySqldump命令导出数据之前,你需要先确定要导出哪个数据库,可以使用以下命令查看所有数据库: show databases; 如果你需要导出名为example的数据库,可以使用以下命令: use example; 2. 确定导出的数据表 确定要导出的数…

    database 2023年5月21日
    00
  • MYSQL GTID跳过指定事务

    主库删除了ttt表,从库上没有ttt表,出现了报错。[root@mysqlstu2:demo]10:49:52>show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to s…

    MySQL 2023年4月13日
    00
  • SQL Server 触发器实例详解

    SQL Server 触发器实例详解 什么是SQL Server触发器? SQL Server 触发器是一段特殊的代码,可以自动地在特定情况下执行。当执行到 SQL Server 数据库上的特定动作时,触发器将会被激活,并执行预定义好的代码。触发器通常被用来在数据库发生变化时执行额外的自定义代码。 SQL Server 触发器的分类 SQL Server 触…

    database 2023年5月21日
    00
  • SpringBoot配置ShedLock分布式定时任务

    Spring Boot 配置 ShedLock 分布式定时任务教程 简介 ShedLock是一个轻量级的Java库,支持分布式锁和分布式定时任务。它的目标是使定时任务在分布式环境中更可靠和可重复性。 步骤 1:添加依赖 首先,你需要在你的 pom.xml 文件中添加 ShedLock 的依赖: <dependency> <groupId&g…

    database 2023年5月22日
    00
  • MySQL给数据库表添加字段

    MySQL 给数据库表添加字段的方法: ALTER TABLE 语句 ALTER TABLE 语句可以在数据表中添加、修改或删除字段。 添加字段: 语法:ALTER TABLE table_name ADD column_name column_definition; 例: ALTER TABLE student ADD age INT(3); 在 stud…

    MySQL 2023年3月9日
    00
  • Oracle 中 decode 函数用法

    当我们在开发 Oracle 数据库时,需要对数据进行操作,其中一个非常常用的函数是decode()。decode()函数可以根据指定的条件,返回不同的结果。本文将详细讲解decode()函数的用法,希望对大家学习和开发Oracle数据库有所帮助。 1. decode()函数基本语法 decode()函数的基本语法如下: decode(expression, …

    database 2023年5月21日
    00
  • MySQL Union合并查询数据及表别名、字段别名用法分析

    MySQL Union合并查询数据及表别名、字段别名用法分析 简介 MySQL的UNION语句可以将多条SELECT语句的结果集合并在一起,UNION语句必须满足以下要求: 多条SELECT语句返回的列数必须相同; 多条SELECT语句返回的列的数据类型必须兼容; UNION语句返回的结果集中,列的名称以第一条SELECT语句为准。 语法 SELECT co…

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