实验11 数据库日志及数据库恢复

一、 实验目的

了解Mysql数据库系统中数据恢复机制和主要方法。

二、 实验环境

操作系统:Microsoft Windows 7旗舰版(32&64位)/Linux。
硬件:容量足以满足MySQL 5.7(8.0)安装及后续实验的使用。
软件:数据库版本:MySQL 5.7(8.0)。

三、 实验内容

(1) 利用配置文件开启各种MYSQL日志

需要提醒:相关的日志文件都是通过设置生成,实际实验过程中文件名可能和下面例举名称不同。注意调整!!!
① 查看MYSQL的错误日志,了解其中记录的信息情况。

my.inimysqld下可以查询错误日志的配置文件名:
例如:log-error="Pc-202002191131.err"
打开安装路径下的 mysql 下的 data 下的 Pc-202002191131.err 错误日志文件,并利用文本编辑器打开和阅读分析。
在这里插入图片描述
② 利用log-bin参数开启二进制日志,并通过反复重新启动MYSQL服务器查看产生的文件,以及二进制文件的索引文件。

在my.ini的mysqld下加上log-bin及其配置信息:
例如:log-bin="Pc-202002191131-bin"
然后重启服务器。
在data下会生成新的二进制日志文件(Pc-202002191131-bin.000030,…..)和.Index文件(Pc-202002191131-bin.index)。
在这里插入图片描述
需要特别指出的是,二进制的文件个数与MySQL服务启动有关,一般每启动一次mysql,将会产生一个新的日志文件!!!(编号会递增)

③ 利用general-log参数开启通用查询日志文件,在MYSQL中进行相关操作,查看日志文件中的记录信息。
在my.ini的mysqld下将general-log=0 改为1,并设置general_log_file的文件名:
general-log=1
general_log_file="Pc-202002191131.log"
然后重启服务器。
在data下会生成通用日志Pc-202002191131.log文件。利用文本编辑器打开阅读。
在这里插入图片描述
④利用log-slow-queries参数开启慢日志文件,在MYSQL中进行操作,查看日志文件中的记录信息。
在my.ini的mysqld下加上log-slow-queries和long_query_time并设置:
slow-query-log=1
slow_query_log_file="Pc-202002191131-slow.log"
long_query_time=10
然后重启服务器.
在data下会生成Pc-202002191131-slow.log文件。利用文本编辑器打开阅读。
在这里插入图片描述

(2) 二进制文件相关操作(多次重新启动MYSQL服务器)

① 利用有关命令查询二进制日志文件信息。
确认二进制日志是否启用

show variables like 'log_bin'

查看二进制日志文件存放的目录:

show variables like 'datadir';

查看当前二进制日志文件(列表最后一个)信息:

show master status;

查看所有二进制日志文件信息:

show binary logs;

查看某个二进制文件内容,两种方法:
a.通过MySQL的mysqlbinlog.exe工具命令行状态下运行查看(注意:cmd命令行)

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqlbinlog.exe"
"C:\ProgramData\MySQL\MySQL Server 8.0\Data\Pc-202002191131-bin.000045"

b.通过MySQL的show binlog events命令查看

show binlog events in 'Pc-202002191131-bin.000045'

② 利用Reset master删除所有二进制日志。(注意,本实验不操作该命令!该命令会消除所有已存在日志,一般慎重使用!)

RESET MASTER

使用该命令,可以删除所有二进制日志文件,新的日志文件名将从000001开始。执行SHOW BINARY LOGS命令查看当前日志文件,可见mysql日志已经更新。
③ 使用PURGE MASTER LOGS语句删除指定日志文件。
#删除指定日志名前所有的日志文件

PURGE {MASTER | BINARY} LOGS TO '日志名';

#删除指定日期前的所有日志文件

PURGE {MASTER | BINARY} LOGS BEFORE '日期';

利用purge master logs to ‘****.000003’删除指定number序号前的所有日志文件
利用purge master logs before ‘指定时间’删除指定时间之前的所有日志文件。
关闭当前使用的binary log,然后打开一个新的binary log文件,文件的序号加1。
flush logs命令的作用就是关闭当前使用的binary log,然后打开一个新的binary log文件,文件的序号加1

flush logs;

(3) 利用mysqlbinlog.exe命令通过二进制日志恢复数据操作

①实验条件
首先要明确MySQL的二进制日志处于打开状态。

show variables like 'log_bin'

a.如果返回NO,则需要开启binlog日志。操作如下:
找到mysql安装目录,打开配置文件my.ini
在[mysqld]下添加:
log-bin=mysql-bin
保存后重启mysql服务。此时在data目录会生成mysql-bin.000001mysql-bin.index
注意:MySQL每次重启服务会重新生成一个binlog二进制文件。
b.如果返回YES,则binlog日志已开启。操作如下命令强制打开一个新的二进制文件,以便简化内容和后续处理:

flush logs;

②实验步骤
a.搭建测试环境和数据。

create database t1;
uset1;
create table ceshi(id int not null);
insert into ceshi values(1),(2),(3);
select *from ceshi;

b.此时模拟服务器定期备份任务,备份t1数据库。(-l是备份期间加读锁,-F 刷新binlog日志,此时会重新生成一个binlog日志,名字是mysql-bin.000002)。

mysqldump.exe -uroot -p*****t1 -l -F >ceshi.sql

mysqldump.exe命令的选项使用请参阅后面附件内容!
这里也可以尝试利用客户端工具保存ceshi表的结构和数据至sql文件。

c.此时向数据库中新插入三条数据。

insert into ceshi values(4),(5),(6);
select *from ceshi;

d.模拟数据库破坏。

drop table ceshi;

select *from ceshi; 会报错!

e.此时数据库破坏后通过备份我们只能恢复备份那一刻的数据,但是在第c步新插入的三条数据不能通过备份恢复。可以通过binlog日志来恢复。

mysql.exe -uroot -p***** <ceshi.sql

也可以利用客户端工具加载运行备份的sql文件来恢复ceshi表和前三行数据。

f.通过binlog恢复新插入的三条数据。
首先要确定二进制日志文件中后插入三条数据的位置,可以有两种方法。
方法1:通过命令行 mysqlbinlog --no-defaults binlog路径\mysql-bin.000002 |more查询。
实际操作:

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqlbinlog" --no-defaults "C:\ProgramData\MySQL\MySQL Server 8.0\Data\Pc-202002191131-bin.000002" |more

在这里插入图片描述
分析判断,只需要恢复上图红色标识位置812-1094这段即可。

方法2:可以在客户端利用show binlog events命令查询(推荐使用)
实际操作:

show binlog events in 'Pc-202002191131-bin.000002'

分析找到后三条数据追加命令的起始位置812,结束位置1094。(注意有明显的事务标识来辅助提示位置判断!!!)

最后命令行执行mysqlbinlog实施恢复操作。
命令格式:

mysqlbinlog.exe --start-position *** --stop-position ***bin.000002 | mysql.exe -uroot –p***

实际操作:

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqlbinlog.exe" --start-position 812--stop-position 1094"C:\ProgramData\MySQL\MySQL Server 8.0\Data\Pc-202002191131-bin.000002" |"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p1234

成功!利用binlog恢复数据完成。

(4) 数据库备份与还原

以下操作均是以命令行形式给出,实际实验大家可以利用Navicat客户端平台来实施相同功能的任务要求。
Mysqldump –uroot –p --all-database>all.sql 备份所有数据库Mysqldump.exe

Mysqldump –uroot –p --database test>test.sql 备份test数据库
Mysqldump –uroot –p –l teststudent course sc>s_c_sc.sql 备份test数据库中的学生、课程、选课成绩表
Mysql –uroot –p <all.sql 还原所有数据库
Mysql –uroot –p test<test.sql 还原test数据库

(5) 导出文件与加载数据

① 利用SELECT ...INTO OUTFILE导出stud表到stud.txt文本文件中
② 利用LOAD DATA INFILE导入文本文件stud.txt的数据到新建的stud1空表中

附:mysqldump.exe命令选项说明
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第232题用栈实现队列

题目&#xff1a; 题解&#xff1a; class MyQueue:def __init__(self):self.A, self.B [], []def push(self, x: int) -> None:self.A.append(x)def pop(self) -> int:peek self.peek()self.B.pop()return peekdef peek(self) -> int:if self.B: return self.B[-1…

C++树(二)【直径,中心】

目录&#xff1a; 树的直径&#xff1a; 树的直径的性质&#xff1a; 性质1&#xff1a;直径的端点一定是叶子节点 性质2&#xff1a;任意点的最长链端点一定是直径端点。 性质3&#xff1a;如果一棵树有多条直径,那么它们必然相交&#xff0c;且有极长连…

服务端渲染框架:Nuxt.js 与 Next.js 的区别和对比

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

掌握这些技巧,让你成为画册制作高手

在数字化的时代背景下&#xff0c;电子画册以其便捷的传播方式、丰富的视觉表现形式&#xff0c;赢得了大众的喜爱。它不仅能够在个人电脑上展现&#xff0c;还能通过智能手机、平板电脑等多种移动设备随时随地被访问和浏览。这种跨平台的支持&#xff0c;使得无论你身处何地&a…

leetcode刷题总结——字符串匹配

KMP&#xff08;字符串匹配算法&#xff09; 主串或目标串&#xff1a;比较长的&#xff0c;我们就是在它里面寻找子串是否存在&#xff1b; 子串或模式串&#xff1a;比较短的。 前缀&#xff1a;字符串A和B&#xff0c;A BS&#xff0c;S非空&#xff0c;则B为A的前缀。 …

【Java--数据结构】二叉树

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 树结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合 注意&#xff1a;树形结构中&#xff0c;子…

【linux高级IO(三)】初识epoll

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux高级IO 1. 前言2. 初识e…

STM32 HRTIM生成PWM时遇到无法输出PWM脉冲波形问题

在使用HRTIM生成PWM时&#xff0c;当把周期寄存器更新的设置放到while循环中时&#xff0c;无法输出PWM脉冲波形&#xff0c;即使增加计数延时也无法输出&#xff0c;最终只能放到中断函数中执行后期寄存器值更新才能够生成PWM脉冲波形。

主流大数据调度工具DolphinScheduler之数据ETL流程

今天给大家分享主流大数据调度工具DolphinScheduler&#xff0c;以及数据的ETL流程。 一&#xff1a;调度工具DS 主流大数据调度工具DolphinScheduler&#xff0c; 其定位&#xff1a;解决数据处理流程中错综复杂的依赖关系 任务支持类型&#xff1a;支持传统的shell任务&a…

冷却塔由那些配件组成

1、淋水填料 将需要冷却的水&#xff08;热水&#xff09;多次溅洒成水滴或形成水膜&#xff0c;以增加水和空气的接触面积和时间&#xff0c;促进水和空气的热交换。 填料在开式横流冷却塔的作用是增加循环水与空气的接触面积&#xff0c;并延长冷却水停留在空气中的时间&am…

LabVIEW工业设备姿态监测系统

开发了一种基于LabVIEW的工业设备姿态监测系统&#xff0c;针对现有监测设备在适应性和反应时间上的不足&#xff0c;采用了LabVIEW软件和STM32微控制器&#xff0c;通过高精度姿态传感器实现了对设备姿态的快速准确监测&#xff0c;大大提高了工业作业的安全与效率。 项目背景…

C++深度解析教程笔记9-静态成员变量,静态成员函数,二阶构造,友元,函数重载,操作符重载

C深度解析教程笔记9 第25课 - 类的静态成员变量实验-数对象个数&#xff08;失败&#xff09;实验-静态变量小结 第26课 - 类的静态成员函数实验-修改对象的静态变量数值实验-利用静态成员函数实验-静态变量静态函数实现统计对象个数小结 第27课 - 二阶构造模式实验-初始化是否…

百度人脸识别Windows C++离线sdk C#接入

百度人脸识别Windows C离线sdk C#接入 目录 说明 设计背景 • 场景特点&#xff1a; • 客户特点&#xff1a; • 核心需求&#xff1a; SDK 包结构 效果 代码 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 功能接口 设计背景 • 场景特点&#xff1a; -…

支持前端路由权限和后端接口权限的企业管理系统模版

一、技术栈 前端&#xff1a;iview-admin vue 后端&#xff1a;springboot shiro 二、基于角色的权限控制 1、路由权限 即不同角色的路由访问控制 2、菜单权限 即不同角色的菜单列表展示 3、按钮权限 即不同角色的按钮展示 4、接口权限 即不同角色的接口访问控制 三…

数字化时代的生产革新:数字孪生平台如何助力新质生产力

一.新质生产力 在当今快速发展的科技和信息时代&#xff0c;企业和组织在提高生产效率和质量方面面临着越来越多的挑战和机遇。新质生产力的概念应运而生&#xff0c;强调通过创新和技术进步&#xff0c;不仅提升生产的数量和速度&#xff0c;更重要的是优化生产方式、改善产品…

leetcode热题100.分割等和子集(动态规划)

分割等和子集 Problem: 416. 分割等和子集 思路 我选择使用动态规划的方法来解题。我们需要判断是否可以将数组分割成两个子集&#xff0c;使得这两个子集的和相等。这个问题可以转化为在数组中找到一个子集&#xff0c;使得其和等于数组总和的一半。 解题过程 首先&#xf…

图——图的应用02最短路径(Dijkstra算法与Floyd算法详解),拓扑排序及关键路径

前面介绍了图的应用——01最小生成树章节&#xff0c;大家可以通过下面的链接学习&#xff1a; 图——图的应用01最小生成树&#xff08;Prim算法与Kruskal算法详解&#xff09; 今天就讲一下图的其他应用——最短路径&#xff0c;拓扑排序及关键路径。 目录 一&#xff0c…

成都亚恒丰创教育科技有限公司 【插画猴子:笔尖下的灵动世界】

在浩瀚的艺术海洋中&#xff0c;每一种创作形式都是人类情感与想象力的独特表达。而插画&#xff0c;作为这一广阔领域中的璀璨明珠&#xff0c;以其独特的视觉语言和丰富的叙事能力&#xff0c;构建了一个又一个令人遐想连篇的梦幻空间。成都亚恒丰创教育科技有限公司 在众多插…

Linux——进程概念详解

一、进程的基本概念 在给进程下定义之前&#xff0c;我们先了解一下进程&#xff1a; 我们在编写完代码并运行起来时&#xff0c;在我们的磁盘中会形成一个可执行文件&#xff0c;当我们双击这个可执行文件时&#xff08;程序时&#xff09;&#xff0c;这个程序会加载到内存…

动手学深度学习6.3 填充和步幅-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;填充和步幅_哔哩哔哩_bilibili 代码实现_哔哩哔哩_bilibili 本节教材地址&#xff1a;6.3. 填充和…