2024年【MySQL必知必会】 日志Log详解 数据备份_备份log文件的阈值,华为C C++面试真题解析

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

SET @@global.general_log_file = ‘C:\mytest.log’; – 修改日志名称


![在这里插入图片描述](https://img-blog.csdnimg.cn/aa29f6a2c56d49fd80e456ca728e13af.png)


### 查看通用查询日志


打开这个 , 用记事本就可以看了  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/239688cff7334dfd82fad478ad2ec72f.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/02a4d2871ecf42a289492fd6a470c7bd.png)


### 删除通用查询日志


* 为了节省磁盘空间, 我们可以移除旧的日志文件,创建新的日志文件,来对通用查询日志文件进行维护。



– 第一步,关闭通用查询日志
SET GLOBAL general_log = ‘OFF’; – 关闭通用查询日志
SHOW VARIABLES LIKE ‘%general_log%’; – 查看通用查询日志状态 general 也可以
– 第二步,把通用查询日志文件“C:\mytest.log”移至备份文件夹,空出磁盘 H 的空间。 就是把这个文件移到别的地方

– 第三步,开启通用查询日志
SET GLOBAL general_log = ‘ON’;
SHOW VARIABLES LIKE ‘%general_log%’; – 这个时候 目录下会重新生产一个 mytest.log


![在这里插入图片描述](https://img-blog.csdnimg.cn/1792ac40b7b94c7dba8363ce52d77091.png)


## 慢查询日志


* 慢查询日志用来记录执行时间超过指定时长的查询。它的主要作用是,帮助我们发现那些 执行时间特别长的 `SQL` 查询,并且有针对性地进行优化,从而提高系统的整体效率。
* `C:\ProgramData\MySQL\MySQL Server 8.0) MySQL 的配置文件“my.ini”` 记事本打开即可
* 如果修改了 MySQL 的配置文件“my.ini”,就需要重启服务器,这样才 能使修改生效。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/13a7afacc981447e8594782b63a352c9.png)
* 控制慢查询日志的还有一个系统变量:`min_examined_row_limit`。 这个变量的意思是,查询扫描过的最少记录数。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6aeda8afb0904384b05319435582d1ba.png)
* 查询扫描过的记录数大于等于min\_examined\_row\_limit,并且查询执行时间超过 long\_query\_time 的值,那么,这个查询就被记录到慢查询日志中.


例子  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/116ae01e100e4e2daa9aa695dc1fdab0.png)


## 错误日志


* **错误日志记录了 MySQL 服务器启动、停止运行的时间,以及系统启动、运行和停止过程 中的诊断信息,包括错误、警告和提示等**
* 错误 日志是发现问题、解决故障的首选。
* 默认就是数据目 录:“C:\ProgramData\MySQL\MySQL Server 8.0\Data”。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d706ce62f6394b0d8ca527645bda4f13.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/52ff1f4599904f51873dd1951863527a.png)


## 二进制日志


* 二进制日志主要记录数据库的更新事件 , 二进制日志是进行数据恢复和数据复制的利器。


### 操作



– 查看当前正在写入的二进制日志的 SQL 语句是:
SHOW MASTER STATUS; – 查看当前正在写入的二进制日志的名称和当前写入的位置:

– 查看所有的二进制日志的 SQL 语句是:
SHOW BINARY LOGS;

– 查看二进制日志中所有数据更新事件的 SQL 语句是:
SHOW BINLOG EVENTS IN 二进制文件名;

– 刷新 二进制日志
FLUSH BINARY LOGS;
– 关闭服务器正在写入的二进制日志文件,并重新打开一个新文件,文件名的后缀在现有的基础上加 1。

– 用二进制日志恢复数据
mysqlbinlog –start-positon=xxx --stop-position=yyy 二进制文件名 | mysql -u 用户 -p
– 执行二进制日志中从位置 xxx 开始,到 yyy 截止的所有数据更新操作。这里的截止位置也可以不写,意思是从位置 xxx 开始,执行二进制文件中的所有数据更新操作。

– 删除二进制日志
RESET MASTER;
– 所有二进制日志文件都被删除了,MySQL 从头准备了一个“.000001”为后缀的新的二进制日志文件。
SHOW BINARY LOGS;

PURGE MASTER LOGS TO ‘GJTECH-PC-bin.000005’; – 删除指定的日志


* **每当服务器启动、刷新二进制日志或者二进制日志大小超过系统变量 max\_binlog\_size 指定的值时,系统就会生成一个新的二进制日志文件。**


### 案例


就是指对数据库中存储的全部数据进行备份。备份完成之后,我又在商品信息表中插入了新数据。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b1de91f8a3974221976174d19e5624c6.png)



– 第一步,做数据库备份。
mysqldump -u 用户 -p 密码 数据库 > 备份文件

H:>mysqldump -u root -p demo > mybackup.sql // 把demo全备份了
Enter password: *****
– 第二步,用“FLUSH BINARY LOGS;” 产生新的日志。
– 这步操作的目的是:产生一个新的二进制日志文件,使这个文件只保存数据备份之后的数据更新事件,这样可以方便我们查看文件的内容
– 第三步,给商品信息表插入一条新的数据
– 第四步,准备从备份文件恢复数据。
SHOW BINARY LOGS; – xxbin.000012
FLUSH BINARY LOGS; – 刷新产生新的二进制log
SHOW MASTER STATUS;
DROP DATABASE demo;CREATE DATABASE demo; – 删除demo 并且 创建一个同名的

– 第五步,从备份恢复数据
mysql -u 用户 -p 密码 数据库名称 < 备份文件

H:>mysql -u root -p demo<mybackup.sql – 这个表保存的是没有增加内容的
Enter password: *****
SELECT * FROM demo.goodsmaster;
– 增加的内容在 上面刷新前的xx bin.00000012 中

C:>mysqlbinlog --start-position=306 “C:\ProgramData\MySQL\MySQL Server 8.0\Data\GJTECH-PC-bin.000012” | mysql -u root -p
Enter password: *****
– 更新增加的内容部分


![在这里插入图片描述](https://img-blog.csdnimg.cn/686c94dd6085426592a4b1a5acc777d8.png)


* 二进制日志:主要就是不容易找准起始位置或者截止位置,建议你在数据备份结束之后,把当前的二进制日志位置记录下来,存放在一个安全的地方,这关系到数据恢复的完整性,一定不要怕麻烦。


## 中继日志


* \*\*中继日志只在主从服务器架构的从服务器上存在。\*\*从主服务器读取二进制日志的内容写入本地的日志文件中,这个从 服务器本地的日志文件就叫中继日志,根据中继日志的 内容对从服务器的数据进行更新,完成主从服务器的数据同步。
* 搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录 (C:\ProgramData\MySQL\MySQL Server 8.0\Data)下,文件名的格式是:从服务器名 -relay-bin. 序号。
* 中继日志还有一个索引文件:从服务器名 -relay-bin.index,用来定位当前正在使用的中继 日志。
* 中继日志与二进制日志的格式相同,可以用 mysqlbinlog 工具进行查看。下面是中继日志 的一个片段:
* 如果从服务器宕机,有的时候为了系统恢复,你 要重装操作系统,这样就可能会导致你的服务器名称与之前不同。 解决 把服务器名称改回之前的名称就可以


## 回滚日志


* 回滚日志的作用是进行事务回滚。
* 当事务需要回滚的 时候,可以通过读取回滚日志,恢复到指定的位置。另一方面,回滚日志也可以让其他的 事务读取到这个事务对数据更改之前的值,从而确保了其他事务可以不受这个事务修改数 据的影响.  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/554a98a0a2284cef8e6ee5a94495f4aa.png)



mysql> SHOW VARIABLES LIKE ‘%innodb_undo%’;
±-------------------------±------+
| Variable_name | Value |
±-------------------------±------+
| innodb_undo_directory | .\ | – 表示回滚日志的存储目录是数据目录。 数据目录的位置可以通过查询变量“datadir”来查看
| innodb_undo_log_encrypt | OFF | – 表示回滚日志不加密。
| innodb_undo_log_truncate | ON | – 表示回滚日志是否自动截断回收,前提是设置了独立表空间。
| innodb_undo_tablespaces | 2 | – 表示回滚日志有自己的独立表空间,而不是在共享表空间ibdata文件中。
±-------------------------±------+
4 rows in set, 1 warning (0.00 sec)


![在这里插入图片描述](https://img-blog.csdnimg.cn/0b4c2e99ba9b4474ace93275f062725f.png)


## 重做日志


* 在系统遇到故障的恢复过程中,可以修复被未完成的事务修改的数据。
* MySQL 为了提高数据存取的效率,减少磁盘操作的频率,对数据的更新操作不会立即写到磁盘上,而是把数据更新先保存在内存中,积累到一定程度,再集中进行磁盘读写操作。这样就存在一个问题:一旦出现宕机或者停电等异常情况,内存中保存的数据更新操作可能会丢失。这个时候就可以通过读取重做日志中记录的数据更新操作,把没来得及写到磁盘上的数据更新写到磁盘上,确保数据的完整性。



mysql> SHOW VARIABLES LIKE ‘%innodb_log_files_in_group%’;
±--------------------------±------+
| Variable_name | Value |
±--------------------------±------+
| innodb_log_files_in_group | 2 | – 有 2 个重做日志文件
±--------------------------±------+
1 row in set, 1 warning (0.00 sec)


* 量 innodb\_log\_files\_in\_group 值的取值范围是 1~4,这四个文件分别用于记录不同的操作.
* 用户创建表的插入操作;
* 用户创建表的更新和删除操作;
* 临时表的插入操作;
* 临时表的更新和删除操作。


## 总结


* 通用查询日志:可以记录所有连接的起始时间和终止时间,以及连接发送给数据库服务 器的所有指令,对我们复原操作的实际场景、发现问题,甚至是对数据库操作的审计都 有很大的帮助。
* 慢查询日志:可以记录运行时间和检查记录数超过指定值的查询,方便我们对查询进行 优化。
* 错误日志:它记录了服务器启动、运行和停止过程中的诊断信息,方便我们了解服务器 的状态,从而对服务器进行维护
* 二进制日志:主要用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复
* 中继日志:就是主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作
* 回滚日志:用来存储事务中数据更新前的状态,以便回滚和保持其他事务的数据一致性


![img](https://img-blog.csdnimg.cn/img_convert/27362f6c0e12454536e5c9898d11a3c5.png)
![img](https://img-blog.csdnimg.cn/img_convert/3c8db5bcf5be74a763f21bdf548bfd28.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值