mysql数据恢复,使用binlog配置恢复未备份数据

2023-10-26

使用mysqlbinlog配置,恢复数据库

什么是mysqlbinlog

binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。

binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。

使用mysqlbinlog功能必须先在mysql配置binlog,开启binlog服务

配置binlog

一. 5.7之前,my.cnf/my.ini都在mysql得根目录下,只需要在mysqld下面添加配置

log-bin=mysql-bin

binlog-format=Row

server-id=1

解释:

1.开启binlog。=mysql-bin这部分参数可以改成一个路径存放binlog文件,默认是这个配置,文件存放到mysql得data文件夹内初始化生成mysql-bin.00000x/mysql-bin.index文件

2. binlog-format有3个参数

① STATEMENT模式(SBR)

每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

② ROW模式(RBR)

不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。

③ MIXED模式(MBR)

以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

在MySQL 5.7.7之前,默认格式是 STATEMENT。在MySQL 5.7.7及更高版本中,默认值是ROW。 例外:在NDB群集中,默认值是MIXED; NDB群集不支持基于语句的复制。

用户必须有权SUPER 设置全局binlog_format值或会话值。

3. server-id,开启binlog必须设置此参数,否则报错,不能启动服务,值是一个随机数,在主从mysql配置中要设定不能重复得值

二.5.7之后

5.7之后my.cnf/my.ini被挪到了mysql根目录下得bin文件夹,我在此配置中开启binlog无效,在mysql根目录下配置my.cnf/my.ini,内容如下:

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

log-bin=mysql-bin

binlog-format=Row

server-id=1

即可正常使用,

备注:开启binlog配置后,个人使用得windows10系统,在用一些集成工具比如:phpstudy,wamp启动mysql得时候不能启动,权限不足,需要在cmd窗口下,使用管理员权限启动mysql服务。

三.配置好binlog之后检查配置是否开启

mysql> show variables like 'log_bin%'; 

Log_bin  NO开启binlog服务

四.删库之后使用备份与binlog文件恢复数据

新建数据库并建表填入数据如下

备份数据库,数据id=7,备份后添加几条数据,最终表数据如下

 

删除数据库,

恢复数,此时执行一次刷新日志索引操作,重新开始新的binlog日志记录文件,理论说 已有得binlogn 文件不会再有后续写入了(便于我们分析原因及查找pos点),以后所有数据库操作都会写入到下一个日志文件;

      mysql> mysql> flush logs;

      mysql> show master status;

导入备份数据库文件,恢复如下

此时可以看到,id=8,9,10内容我们并没有备份,使用mysql命令查看最新得binlog日志

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

在11694进行了删库操作,恢复到删库操作前一个节点,11594

进入数据库数据文件目录,本人是windwos10系统,进入mysql下得data文件夹,

从binlog日志恢复数据

     

      恢复语法格式:

      # mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

 

        常用选项:

          --start-position=953                   起始pos点

          --stop-position=1437                   结束pos点

          --start-datetime="2013-11-29 13:18:54" 起始时间点

          --stop-datetime="2013-11-29 13:21:53"  结束时间点

          --database=zyyshop                     指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)

           

        不常用选项:   

          -u --user=name              Connect to the remote server as username.连接到远程主机的用户名

          -p --password[=name]        Password to connect to remote server.连接到远程主机的密码

          -h --host=name              Get the binlog from server.从远程主机上获取binlog日志

          --read-from-remote-server   Read binary logs from a MySQL server.从某个MySQL服务器上读取binlog日志

 

实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径;

我们需要恢复到11694,命令如下:

报错如下:

一是在MySQL的配置my.cnf/my.ini中将default-character-set=utf8 修改为 character-set-server = utf8,但是这需要重启MySQL服务,如果你的MySQL服务正在忙,那这样的代价会比较大。

二是用--no-defaults 命令参数

5.7之后,mysql不允许在命令行直接键入数据库密码,建议在输入密码提示之后在键入密码,命令行得密码可以忽略掉,或者在my.cnf/my.ini中配置

最终命令如下:

D:\phpStudy\PHPTutorial\MySQL\data> mysqlbinlog --no-defaults mysql-bin.000001 --stop-position 11694 | mysql -uroot

去看下数据库吧

id8,9,10在没有备份文件得情况下也恢复成功,还是要备份好数据库文件,不能所有数据完全依赖binlog日志恢复。binlog开启后,会占用不小得空间,以及一部分mysql性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql数据恢复,使用binlog配置恢复未备份数据 的相关文章

随机推荐

  • MATLAB安装配置MinGW-w64 C++编译器

    文章目录 前言 一 Mingw安装 1 安装教程 2 验证 二 MATLAB安装配置MinGW 总结 pic center 前言 只是为方便学习 不做其他用途 一 Mingw安装 在网上找到的安装一直报错 The file has been
  • uniapp(小程序)加载更多(LoadMore)在列表上的应用和刷新逻辑完善

    活动列表应用loadMore应用以及刷新逻辑完善 获取列表的方法会有3种状态 第一种是onLoad时 首屏的1页5条 第二种是加载更多触发的n页5条 以及第三种 当我们离开页面去往其他页面再回到列表页进行刷新触发的1页n条 首先先说加载更多
  • 全国DNS服务器IP地址大全、公共DNS大全

    各省公共DNS服务器IP大全 名称 各省公共DNS服务器IP大全 114 DNS 114 114 114 114 114 114 115 115 阿里 AliDNS 223 5 5 5 223 6 6 6 百度 BaiduDNS 180 7
  • 突发:香港警方警告 JPEX疑涉诈骗

    来源 香港明报 据香港明报跟进报道 未获发牌的 绿石数字资产平台 JPEX 涉疑违规在港宣传及经营 其后有客户表示提币失败 警务处长萧泽颐今日表示 警方前日收到证监会转介案件 因或涉及行骗成份 现由商业及罪案调查科跟进 至昨日下午3时收到8
  • 《UVM实战》学习笔记——第六章 sequence机制

    文章目录 前言 一 sequence的启动与执行 1 启动 2 启动方式 3 sequence分类 二 sequence的仲裁机制 1 sequence相关的宏 2 sequencer的仲裁算法 6种 3 sequence独占sequenc
  • USB HUB简述

    概述 hub 集线器 连接在host与device之间的一种用于usb接口扩展的usb设备 可以将一个usb上行接口扩展为多个下行接口 使得一个host可以同时与多个device连接 一般来说 一块hub桥接芯片可扩展4个usb接口 而市面
  • ‘dtools’不是内部或外部命令,也不是可运行的程序或批处理文件,个人解决方案

    powershell或cmd执行时出现 dtools 不是内部或外部命令 也不是可运行的程序或批处理文件 奇怪的是 我的工程目录下明明有dtools exe可执行文件 搜索引擎上多数反馈是添加C system32等路径到环境变量 但后续发现
  • 亲密关系-【沟通提示】-如何把学习到的东西用到生活中

    关于亲密关系 我学到了这么多 可为什么ta对这些毫不在意 我知道课里的观点都很重要 可我该怎么教会ta ta没有意识 看画面 案例 妈妈说话总是带有攻击性 总是骂她 怎么说 常见误区 你不要老师贬低我 对方苦苦思考 我到底该怎么办 你下意识
  • java中的多重循环

    多重循环 一个循环体内又包含另一个完整的循环结构 如下 while 循环条件1 循环操作1 while 循环条件2 循环操作2 do 循环操作1 do 循环操作2 while 循环条件2 while 循环条件1 for 循环条件1 循环操作
  • Docker - 使用Docker Compose部署应用

    简介 Docker Compose是一个基于Docker Engine进行安装的Python工具 该工具使得用户可以在一个声明式的配置文件中定义一个多容器的应用 在Docker节点上 以单引擎模式 Single Engine Mode 进行
  • 手写算法-python代码实现Lasso回归

    手写算法 python代码实现Lasso回归 Lasso回归简介 Lasso回归分析与python代码实现 1 python实现坐标轴下降法求解Lasso 调用sklearn的Lasso回归对比 2 近似梯度下降法python代码实现Las
  • 【直达本质讲运放】运放的“第一原理”式定量分析法

    数电 模电那两本书我也完整地翻过一 二遍 诶我为什么用 也 下面就是来点不复杂的 如果是那还不如直接把书的内容粘过来呢 对于运放的定量分析 虚短虚断 就如同 奇变偶不变 一样喜闻乐见的普及 但是对于什么时候用 虚短 什么时候用 虚断 学习的
  • Ridge和Lasso回归

    上周看了看回归方面的知识 顺便复 xue 习一下Ridge 岭回归 和Lasso回归 套索回归 瞅到了一篇英文博客讲得不错 翻译一下 本文翻译自 Ridge and Lasso Regression 本文是一篇Josh Starmer关于
  • 常用网络协议神图

  • 凸优化(一)——Introduction

    Introduction 一 最优化问题的数学表达 在最优问题中 其数学表达往往能化成标准形式 如下 minimizef0 x subject tofi x bi i 1 m begin aligned minimize quad f 0
  • 微信小程序对上传的图片进行裁剪

    背景 使用uniapp中uni chooseImage的裁剪参数crop只能在App中生效 在微信小程序中不生效 实现思路 uni chooseImage打开相册获取图片路径 uni chooseImage OBJECT uni app官网
  • c++面试记录

    1 数组与指针区别 数组 数组是用于储存多个相同类型数据的集合 指针 指针是一个变量 但是它和普通变量不一样 它存放的是其它变量在内存中的地址 赋值 数组 只能一个一个元素的赋值或拷贝 指针 指针变量可以相互赋值 表示范围 数组有效范围就是
  • flink table 使用Kafka Connector处理嵌套json

    使用flink table api 连接kafka 处理json类型数据 单层json处理比较简单 官方或网上都有很多例子 处理嵌套的json数据没什么介绍 处理嵌套json数据主要是schema定义 StreamExecutionEnvi
  • Linux系统之使用yum安装Redis数据库

    Linux系统之使用yum安装Redis数据库 一 redis介绍 1 redis解释 2 redis特点 3 redis使用场景 二 检查系统版本 1 检查系统版本 2 检查内核版本 三 检查yum仓库状态 四 查看系统默认提供的redi
  • mysql数据恢复,使用binlog配置恢复未备份数据

    使用mysqlbinlog配置 恢复数据库 什么是mysqlbinlog binlog是记录所有数据库表结构变更 例如CREATE ALTER TABLE 以及表数据修改 INSERT UPDATE DELETE 的二进制日志 binlog