同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等。本文主要描述错误日志文件。
微信公众号【黄小斜】大厂程序员,互联网行业新知,终身学习践行者。关注后回复「Java」、「Python」、「C++」、「大数据」、「机器学习」、「算法」、「AI」、「Android」、「前端」、「iOS」、「考研」、「BAT」、「校招」、「笔试」、「面试」、「面经」、「计算机基础」、「LeetCode」 等关键字可以获取对应的免费学习资料。
MySQL日志文件系统的组成 %20a、错误日志:记录启动、运行或停止mysqld时出现的问题。 %20b、通用日志:记录建立的客户端连接和执行的语句。 %20c、更新日志:记录更改数据的语句。该日志在MySQL%205.1中已不再使用。 %20d、二进制日志:记录所有更改数据的语句。还用于复制。 %20e、慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。 %20f、Innodb日志:innodb%20redo%20log %20缺省情况下,所有日志创建于mysqld数据目录中。 %20可以通过刷新日志,来强制mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。 %20当你执行一个FLUSH%20LOGS语句或执行mysqladmin%20flush-logs或mysqladmin%20refresh时,则日志被老化。 %20对于存在MySQL复制的情形下,从复制服务器将维护更多日志文件,被称为接替日志。
2、错误日志 %20错误日志是一个文本文件。 %20错误日志记录了MySQL%20Server每次启动和关闭的详细信息以及运行过程中所有较为严重的警告和错误信息。 %20可以用--log-error[=file_name]选项来开启mysql错误日志,该选项指定mysqld保存错误日志文件的位置。 %20对于指定--log-error[=file_name]选项而未给定file_name值,mysqld使用错误日志名host_name.err%20并在数据目录中写入日志文件。 %20在mysqld正在写入错误日志到文件时,执行FLUSH%20LOGS%20或者mysqladmin%20flush-logs时,服务器将关闭并重新打开日志文件。 %20建议在flush之前手动重命名错误日志文件,之后mysql服务将使用原始文件名打开一个新文件。 %20以下为错误日志备份方法: %20 shell>%20mv%20host_name.err%20host_name.err-old %20shell>%20mysqladmin%20flush-logs %20shell>%20mv%20host_name.err-old%20backup-directoryMySQL数据库InnoDB存储引擎Log漫游
1%20–%20Undo%20Log
Undo%20Log%20是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo%20Log来实现多版本并发控制(简称:MVCC)。
-%20事务的原子性(Atomicity) 事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中发生 了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过。
-%20原理 %20Undo%20Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方 %20(这个存储数据备份的地方称为Undo%20Log)。然后进行数据的修改。如果出现了错误或者用户执行了 %20ROLLBACK语句,系统可以利用Undo%20Log中的备份将数据恢复到事务开始之前的状态。
除了可以保证事务的原子性,Undo%20Log也可以用来辅助完成事务的持久化。
-%20事务的持久性(Durability) %20事务一旦完成,该事务对数据库所做的所有修改都会持久的保存到数据库中。为了保证持久性,数据库 %20系统会将修改后的数据完全的记录到持久的存储上。
-%20用Undo%20Log实现原子性和持久化的事务的简化过程 %20假设有A、B两个数据,值分别为1,2。 %20A.事务开始. %20B.记录A=1到undo%20log. %20C.修改A=3. %20D.记录B=2到undo%20log. %20E.修改B=4. %20F.将undo%20log写到磁盘。 %20G.将数据写到磁盘。 %20H.事务提交 %20这里有一个隐含的前提条件:‘数据都是先读到内存中,然后修改内存中的数据,最后将数据写回磁盘’。
%20之所以能同时保证原子性和持久化,是因为以下特点: %20A.%20更新数据前记录Undo%20log。 %20B.%20为了保证持久性,必须将数据在事务提交前写到磁盘。只要事务成功提交,数据必然已经持久化。 %20C.%20Undo%20log必须先于数据持久化到磁盘。如果在G,H之间系统崩溃,undo%20log是完整的, %20 %20 可以用来回滚事务。 %20D.%20如果在A-F之间系统崩溃,因为数据没有持久化到磁盘。所以磁盘上的数据还是保持在事务开始前的状态。
缺陷:每个事务提交前将数据和Undo%20Log写入磁盘,这样会导致大量的磁盘IO,因此性能很低。
如果能够将数据缓存一段时间,就能减少IO提高性能。但是这样就会丧失事务的持久性。因此引入了另外一 种机制来实现持久化,即Redo%20Log.
2%20–%20Redo%20Log
-%20原理 %20和Undo%20Log相反,Redo%20Log记录的是 新数据的备份。在事务提交前,只要将Redo%20Log持久化即可, %20不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是Redo%20Log已经持久化。系统可以根据 %20Redo%20Log的内容,将所有数据恢复到最新的状态。
-%20Undo%20+%20Redo事务的简化过程 %20假设有A、B两个数据,值分别为1,2. %20A.事务开始. %20B.记录A=1到undo%20log. %20C.修改A=3. %20D.记录A=3到redo%20log. %20E.记录B=2到undo%20log. %20F.修改B=4. %20G.记录B=4到redo%20log. %20H.将redo%20log写入磁盘。 %20I.事务提交
3%20-%20慢查询日志概述
数据库查询快慢是影响项目性能的一大因素,对于数据库,我们除了要优化%20SQL,更重要的是得先找到需要优化的%20SQL。如何找到低效的%20SQL%20是写这篇文章的主要目的。
MySQL%20数据库有一个“慢查询日志”功能,用来记录查询时间超过某个设定值的SQL,这将极大程度帮助我们快速定位到症结所在,以便对症下药。至于查询时间的多少才算慢,每个项目、业务都有不同的要求,传统企业的软件允许查询时间高于某个值,但是把这个标准放在互联网项目或者访问量大的网站上,估计就是一个bug,甚至可能升级为一个功能性缺陷。
为避免误导读者,特申明本文的讨论限制在%20Win%2064位%20+%20MySQL%205.6%20范围内。其他平台或数据库种类及版本,我没有尝试过,不做赘述。
设置日志功能
关于慢查询日志,主要涉及到下面几个参数:
slow_query_log%20:是否开启慢查询日志功能(必填) long_query_time%20:超过设定值,将被视作慢查询,并记录至慢查询日志文件中(必填) log-slow-queries%20:慢查询日志文件(不可填),自动在%20\data\%20创建一个%20[hostname]-slow.log%20文件也就是说,只有满足以上三个条件,“慢查询功能”才可能正确开启或关闭。
4%20-%20主从复制的基础:binlog日志和relaylog日志
什么是MySQL主从复制
简单来说就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是主从复制
复制方式
MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局事务标示符)。 本文只涉及基于日志binlog的主从配置
复制原理
1、Master将数据改变记录到二进制日志(binary%20log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary%20log%20events) 2、Slave通过I/O线程读取Master中的binary%20log%20events并写入到它的中继日志(relay%20log) 3、Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)
1、什么是binlog
%20 %20 %20 %20binlog 是 一个二进制格式的文件,用于记录用户对数据库更新的SQL 语句 信息,例如 更改 数据库 表和更改内容的SQL 语句 都会记录到binlog 里 ,但是对库表等内容的查询不会记录。
%20 默认情况下,binlog 日志是二进制格式的,不能使用查看文本工具的命令(比如, cat , vi 等)查看, 而 使用mysqlbinlog 解析查看 。
2.binlog的作用
%20 %20 %20当 有数据写入到数据库时,还会同时把更新的SQL 语句 写入到对应的binlog 文件里,这个文件就是上文说的 binlog 文件。使用mysqldump 备份时,只是对一段时间的数据进行全备,但是如果备份后突然发现 数据库服务器故障,这个时候就要用到binlog 的日志了。
主要 作用是用于数据库的主从复制及数据的增量恢复。
1.啥是binlog? 记录数据库增删改,不记录查询的二进制日志.2.作用:用于数据恢复.
3、如何 开启binlog 日志功能
在mysql 的配置文件 my.cnf中 , 增加log_bin 参数 即可开启binlog 日志, 也可以通过 赋值来指定binlog 日志的文件名,实例如下:
[root@DB02 ~]# grep log_bin /etc/my.cnf log_bin = /application/mysql/logs/dadong-bin # log_bin [root@DB02 ~]# 提示:也可以按“log_bin = /application/mysql/logs/dadong-bin”命名,目录要存在 为什么要刷新binlog?找到全备数据和binlog文件的恢复临界点.
1、什么是binlog
binlog 是 一个二进制格式的文件,用于记录用户对数据库更新的SQL 语句 信息,例如 更改 数据库 表和更改内容的SQL 语句 都会记录到binlog 里 ,但是对库表等内容的查询不会记录。
默认情况下,binlog 日志是二进制格式的,不能使用查看文本工具的命令(比如, cat , vi 等)查看, 而 使用mysqlbinlog 解析查看 。
2.binlog的作用
当 有数据写入到数据库时,还会同时把更新的SQL 语句 写入到对应的binlog 文件里,这个文件就是上文说的 binlog 文件。使用mysqldump 备份时,只是对一段时间的数据进行全备,但是如果备份后突然发现 数据库服务器故障,这个时候就要用到binlog 的日志了。
主要 作用是用于数据库的主从复制及数据的增量恢复。
1.啥是binlog? 记录数据库增删改,不记录查询的二进制日志.2.作用:用于数据恢复.
3、如何 开启binlog 日志功能
在mysql 的配置文件 my.cnf中 , 增加log_bin 参数 即可开启binlog 日志, 也可以通过 赋值来指定binlog 日志的文件名,实例如下:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 重新学习MySQL数据库10:MySQL里的那些日志们
重新学习MySQL数据库10:MySQL里的那些日志们
26-03-01 - MHA实现MySQL高可用集群架构
MHA实现MySQL高可用集群架构
26-03-01 - 随笔MySQL:Searching rows for update状态解析
- MySQL Router实现MySQL的读写分离
MySQL Router实现MySQL的读写分离
26-03-01 - 软件开发流程图,人人都能学会的流程图画法
软件开发流程图,人人都能学会的流程图画法
26-03-01 - 随笔:MySQL 查询事务状态字段说明
随笔:MySQL 查询事务状态字段说明
26-03-01 - 3DMAX快速制作流线造型贝壳椅教程
3DMAX快速制作流线造型贝壳椅教程
26-03-01 - 3DMAX不锈钢材质效果表现方法及技巧
3DMAX不锈钢材质效果表现方法及技巧
26-03-01 - mysqldump (全量+增量)
mysqldump (全量+增量)
26-03-01 - 3DMAX教程:制作异形建筑模型的外立面
3DMAX教程:制作异形建筑模型的外立面
26-03-01

