热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于mysql:深入理解MySQL日志

默认装置时,谬误日志通常在配置文件(my.cnf)中mysqld局部的log-error配置项进行设置;利用MySQL零碎变量log_error能够查看谬误日志的文件名

1.Error Log

  • 记录MySQL运行过程中的Error、Warning、Note等信息,零碎出错或者某条记录出问题能够查看Error日志。

MySQL的谬误日志默认以hostname.err寄存在MySQL的日志目录,能够通过以下语句查看

  • 默认装置时,谬误日志通常在配置文件(my.cnf)中 mysqld 局部的 log-error 配置项进行设置;利用 MySQL 零碎变量 log_error 能够查看谬误日志的文件名
  • 批改谬误日志的地址能够在 my.cnf 中增加–log-error = [filename]来开启mysql谬误日志。配置如下:

    log_error = /data/mysql_data/error.log
    

2.Slow Log

  • MySQL 慢查问日志(slow query log)记录了执行工夫超过指定阈值的 SQL 语句,能够用于监控须要执行优化的查问语句。
  • 如果启用了慢查问日志,任何执行工夫超过 long_query_time 并且执行次数达到 min_examined_row_limit 次的查问语句都会被记录到慢查问日志中。

查看日志性能是否开启:show variables like “%slow%”;
援用

slow_query_log 配置为ON , 阐明开启慢日志
  • 查看下默认设置的慢查问的工夫:show variables like “%long_query%”;

  • 查看一下日志文件的输入:

对于慢查问日志的剖析,举荐应用 mysqldumpslow 或者 pt-query-digest 工具

3.Relay Log

  • MySQL 中继日志(relay log)只存在于主从复制构造中的从节点上,用于保留主节点传输过去的数据变更事件,而后将这些事件利用于从节点。
  • 中继日志与二进制日志相似,也是由一组带编号的文件组成;同时还蕴含了一个索引文件,记录了所有曾经应用过的中继日志文件。中继日志文件默认寄存在数据目录中。

其中 relay_log 和 relay_log_index 别离对应为中继日志的文件名和索引文件名。 中继日志文件的格局和二进制日志文件的格局雷同,因而也能够应用 mysqlbinlog 工具进行读取

4.Binlog

  • 什么是binlog

    binlog记录了数据库表构造和表数据变更,比方update/delete/insert/truncate/create,它不会记录select
    
    
  • binlog长什么样

    binlog咱们能够简略了解为:存储着每条变更的SQL语句
    默认状况下binlog日志是二进制格局,无奈间接查看,能够应用mysqlbinlog来查看,mysqlbinlog是mysql官网提供的一个binlog查看工具。
    
    
  • binlog个别用来做什么

    次要有两个作用:复制和复原数据
    1.MySQL在公司应用的时候往往都是一主多从构造的,从服务器须要与主服务器的数据保持一致,这就是通过binlog来实现的
    2.数据库的数据被干掉了,咱们能够通过binlog来对数据进行复原。因为binlog记录了数据库表的变更,所以咱们能够用binlog进行复制(主从复制)和复原数据。
    

5.Redo Log

  • 什么是redo log

update table set name=’ws’ where id = 3
援用
MySQL执行这条SQL语句,必定是先把id=3的这条记录查出来,而后将name字段给改掉。这没问题吧?
援用
实际上Mysql的根本存储构造是页(记录都存在页里边),所以MySQL是先把这条记录所在的页找到,而后把该页加载到内存中,将对应记录进行批改。

问题1:如果在内存中把数据改了,还没来得及落磁盘,而此时的数据库挂了怎么办?显然这次更改就丢了。

  • redo log 的作用

其实写redo log的时候,也会有buffer,是先写buffer,再真正落到磁盘中的。至于从buffer什么时候落磁盘,会有配置供咱们配置。
援用
redo log的作用是当咱们批改的时候,写完内存了,但数据还没真正写到磁盘的时候。此时咱们的数据库挂了,咱们能够依据redo log来对数据进行复原。
援用
因为redo log是程序IO,所以写入的速度很快,并且redo log记录的是物理变化(xxxx页做了xxx批改),文件的体积很小,复原速度很快。
援用

  • 什么时候开释

    当对应事务的脏页写入到磁盘之后,redo log的使命也就实现了,重做日志占用的空间就能够重用(被笼罩)。
    

Redo Log & Binlog

  1. 存储的内容

       redo log 记录的是数据的物理变化,binlog 记录的是数据的逻辑变动
    
  2. 性能

       redo log的作用是为长久化而生的。写完内存,如果数据库挂了,那咱们能够通过    redo log来复原内存还没来得及刷到磁盘的数据,
       binlog的作用是复制和复原而生的。主从服务器须要保持数据的一致性,通过binlog来同步数据。
    
  3. binlog和redo log 写入的细节

       redo log是MySQL的Innodb引擎所产生的。
       binlog无论MySQL用什么引擎,都会有的。
    
  4. 写入工夫

      redo log事务开始的时候,就开始记录每次的变更信息
      而binlog是在事务提交的时候才记录。
    
问题2:如果每个申请都须要将数据立马落磁盘之后,那速度会很慢,MySQL可能也顶不住。所以MySQL是怎么做的呢?

MySQL引入了redo log,内存写完了,而后会写一份redo log,这份redo log记录着这次在某个页上做了什么批改。

6.Undo log

1. undo log次要有两个作用:回滚和多版本控制(MVCC)

在数据批改的时候,不仅记录了redo log,还记录undo log,如果因为某些起因导致事务失败或回滚了,能够用undo log进行回滚
undo log次要存储的也是逻辑日志,比方咱们要insert一条数据了,那undo log会记录的一条对应的delete日志。
咱们要update一条记录时,它会记录一条对应相同的update记录。因为undo log存储着批改之前的数据,相当于一个前版本,MVCC实现的是读写不阻塞,读的时候只有返回前一个版本的数据就行了。

  1. 什么时候产生

     事务开始之前,将以后的版本生成undo log,undo 也会产生 redo 来保障undo log的可靠性
    
  2. 什么时候开释

     当事务提交之后,undo log并不能立马被删除,而是放入待清理的链表,由purge线程判断是否由其余事务在应用undo段中表的上一个事务之前的版本信息,决定是否能够清理undo log的日志空间。
    

利用

1.MySQL 怎么保障一致性的

*从数据库层面,数据库通过原子性、隔离性、持久性来保障一致性。在ACID四大个性之中,C(一致性)是目标,A(原子性)、I(隔离性)、D(持久性)是伎俩,是为了保障一致性,数据库提供的伎俩。

*MySQL通过两阶段提交来保障redo log和binlog的数据是统一的。

*阶段1:InnoDB redo log 写盘,InnoDB 事务进入 prepare 状态

*阶段2:binlog 写盘,InnoDB 事务进入 commit 状态

*每个事务binlog的开端,会记录一个 XID event,标记着事务是否提交胜利,也就是说,复原过程中,binlog 最初一个 XID event 之后的内容都应该被 革除

2.MySQL怎么保障原子性的

利用Innodb的undo log。

undo log回滚日志,是实现原子性的要害

当事务回滚时可能撤销所有曾经胜利执行的sql语句,它须要记录你要回滚的相应日志信息。

3.MySQL怎么保障持久性的

利用Innodb的redo log
InnoDB是有事务的:持久性就是靠redo log来实现的(如果写入内存胜利,但数据还没真正刷到磁盘,如果此时的数据库挂了,咱们能够靠redo log来复原内存的数据,这就实现了持久性)
采纳redo log的益处是将redo log进行刷盘比对数据页刷盘效率高,具体表现如下:
      1.redo log体积小,毕竟只记录了哪一页批改了啥,因而体积小,刷盘快。
      2.redo log是始终往开端进行追加,属于程序IO。效率显然比随机IO来的快。

推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
author-avatar
holy190
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有