共计 3246 个字符,预计需要花费 9 分钟才能阅读完成。
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
-
存储的内容
redo log 记录的是数据的物理变化,binlog 记录的是数据的逻辑变动
-
性能
redo log 的作用是为长久化而生的。写完内存,如果数据库挂了,那咱们能够通过 redo log 来复原内存还没来得及刷到磁盘的数据,binlog 的作用是复制和复原而生的。主从服务器须要保持数据的一致性,通过 binlog 来同步数据。
-
binlog 和 redo log 写入的细节
redo log 是 MySQL 的 Innodb 引擎所产生的。binlog 无论 MySQL 用什么引擎,都会有的。
-
写入工夫
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 实现的是读写不阻塞,读的时候只有返回前一个版本的数据就行了。
-
什么时候产生
事务开始之前,将以后的版本生成 undo log,undo 也会产生 redo 来保障 undo log 的可靠性
-
什么时候开释
当事务提交之后,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 来的快。