第17章 MySQL日志
MySQL日志是记录MySQL数据库的日常操作和错误信息的文件。MySQL中,日志可以分为二进制日志、错误日志、通用查询日志和慢查询日志。分析这些日志文件,可以了解MySQL数据库的运行情况、日常操作、错误信息和哪些地方需要进行优化。在这一章中将讲解的内容包括。 • 日志定义、作用和优缺点 • 二进制日志 • 错误日志 • 通用查询日志 • 慢查询日志 • 日志管理 17.1 日志简介
日志是MySQL数据库的重要组成部分。日志文件中记录着MySQL数据库运行期间发生的变化。当数据库遭到意外的损害时,可以通过日志文件来查询出错原因,并且可以通过日志文件进行数据恢复。本节将为读者介绍MySQL日志的含义、作用和优缺点。
MySQL日志可以分为四种,分别是二进制日志、错误日志、通用查询日志和慢查询日志。下面分别简单的介绍这四种日志文件的作用: • 二进制日志: • 错误日志:
• 通用查询日志: • 慢查询日志: 17.2 二进制日志
二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况。通过二进制日志可以查询MySQL数据库中进行了哪些改变。本小节将为读者介绍二进制日志的内容。 17.2.1 启动和设置二进制日志
默认情况下,二进制日志功能是关闭的。通过my.cnf或者my.ini文件的log-bin选项可以开启二进制日志。将log-bin选项加入到my.cnf或者my.ini文件的[mysqld]组中,形式如下: # my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下) [mysqld]表示在配置文件当中加下面的语句就可以 log-bin [=DIR \\ [filename] ] 如图:d p wh
如果按语法加上文件夹和名称看看他的执行情况会怎么样: log-bin [=DIR \\ [filename] ]
17.2.2 查看二进制日志
使用二进制格式可以存储更多的信息,并且可以使写入二进制日志的效率更高。但是,不能直接打开并查看二进制日志。如果需要查看二进制日志,必须使用mysqlbinlog命令。mysqlbinlog命令的语法形式如下:
mysqlbinlog filename.number
17.2.3 删除二进制日志
二进制日记会记录大量的信息。如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。删除二进制日志的方法很多,本小节将为读者详细介绍如何删除二进制日志。 1.删除所有二进制日志
2.根据编号来删除二进制日志 3.根据创建时间来删除二进制日志
瑞赛特,嘛思特
每次系统在启动mysql服务之后重新生成一个二进制日志,
后面接的是二进制的名字和编号
后面接的是时间。
把设定的时间之前的日志进行删除,这里就不删除了。笔者自己去试。 17.2.4 使用二进制日志还原数据库
二 进制日志记录了用户对数据库中数据的改变。如INSERT语句、UPDATE语句、CREATE语句等都会记录到二进制日志中。一旦数据库遭到破坏,可以使用二进制日志来还原数据库。本小节将为读者详细介绍使用二进制日志还原数据库的方法。
如果数据库遭到意外损坏,首先应该使用最近的备份文件来还原数据库。备份之后,数据库可能进行了一些更新。这可以使用二进制日志来还原。因为二进制日志中存储了更新数据库的语句,如UPDATE语句、INSERT语句等。
二进制日志还原数据库的命令如下:
mysqlbinlog filename.number | mysql -u root –p 文件名 编号 用户名 密码 举例:
用上面的命令创建数据库和表:
下面看一下它的日志文件,看里面是否有CREATE、INSERT语句:
这说名语句成功的记录到日志当中。下面停掉服务重新启动:
查看表已经不存在了命令如下:
在查看00008日志:
下面我们通过二进制日志来还原这个employee表
mysqlbinlog filename.number | mysql -u root –p 文件名 编号 用户名 密码
另一窗口中查看表是否存在:
这说明刚才我们删除了现在又恢复了。 17.2.5 暂时停止二进制日志功能
在配置文件中设置了log-bin选项以后,MySQL服务器将会一直开启二进制日志功能。删除该选项后就可以停止二进制日志功能。如果需要再次启动这个功能,又需要重新添加log-bin选项。MySQL中提供了暂时停止二进制日志功能的语句。
本小节将为读者介绍暂时停止二进制日志功能的方法。
如果用户不希望自己执行的某些SQL语句记录在二进制日志中,那么需要在执行这些SQL语句之前暂停二进制日志功能。用户可以使用SET语句来暂停二进制日志功能,SET语句的代码如下: SET SQL_LOG_BIN=0 ; 具体内容自己去试。 17.3 错误日志
错误日志是MySQL数据库中最常用的一种日志。错误日志主要用来记录MySQL服务的开启、关闭和错误信息。本小节将为读者介绍错误日志的内容。 17.3.1 启动和设置错误日志
在MySQL数据库中,错误日志功能是默认开启的。而且,错误日志无法被禁止。默认情况下,错误日志存储在MySQL数据库的数据文件夹下。错误日志文件通常的名称为hostname.err。其中,hostname表示MySQL服务器的主机名。错误日志的存储位置可以通过log-error选项来设置。将log-error选项加入到my.ini或者my.cnf文件的[mysqld]组中,形式如下:
# my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下) [mysqld] 在这个组下面填加: log-error=DIR / [filename]
我们要改天这个文件的路径名就在下面的文件中进行修改:
加上log-error=DIR / [filename]
17.3.2 查看错误日志
错误日志中记录着开启和关闭MySQL服务的时间,以及服务运行过程中出现哪些异常等信息。如果MySQL服务出现异常,可以到错误日志中查找原因。 本小节将为读者介绍查看错误日志的方法。
错误日志是以文本文件的形式存储的,可以直接使用普通文本工具就可以查看。Windows操作系统可以使用文本文件查看器查看。Linux操作系统下,可以使用vi工具或者使用gedit工具来查看。
17.3.3 删除错误日志
数据库管理员可以删除很长时间之前的错误日志,以保证MySQL服务器上的硬盘空间。MySQL数据库中,可以使用mysqladmin命令来开启新的错误日志。mysqladmin命令的语法如下: mysqladmin -u root -p flush-logs 用户名
执行该命令后,数据库系统会自动创建一个新的错误日志。旧的错误日志仍然保留着,只是已经更名为filename.err-old。
如果不用旧的,就直接手动删除。 17.4 通用查询日志
通用查询日志用来记录用户的所有操作,包括启动和关闭MySQL服务、更新语句、查询语句等。本节将为读者介绍通用查询日志的内容。 17.4.1 启动和设置通用查询日志
默认情况下,通用查询日志功能是关闭的。通过my.cnf或者my.ini文件的log选项可以开启通用查询日志。将log选项加入到my.cnf或者my.ini文件的[mysqld]组中,形式如下: # my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下) [mysqld]
log [=DIR \\ [filename] ]
17.4.2 查看通用查询日志
用户的所有操作都会记录到通用查询日志中。如果希望了解某个用户最近的操作,可以查看通用查询日志。通用查询日志是以文本文件的形式存储的。Windows操作系统可以使用文本文件查看器查看。Linux操作系统下,可以使用vi工具或者使用gedit工具来查看。 打开上面创建的hjh文件进行就行
里面黑的是换行回车,先停止mysql服务,在用写字版工具打开:
17.4.3 删除通用查询日志
通用查询日志会记录用户的所有操作。如果数据库的使用非常频繁,那么通用查询日志将会占用非常大的磁盘空间。数据库管理员可以删除很长时间之前的通用查询日志,以保证MySQL服务器上的硬盘空间。本小节将介绍删除通用查询日志的方法。
MySQL数据库中,也可以使用mysqladmin命令来开启新的通用查询日志。新的通用查询日志会直接覆盖旧的查询日志,不需要再手动删除了。mysqladmin命令的语法如下: mysqladmin -u root -p flush-logs 先备份在执行这个语句 17.5 慢查询日志
慢查询日志用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。本节将为读者介绍慢查询日志的内容 17.5.1 启动和设置慢查询日志
默认情况下,慢查询日志功能是关闭的。通过my.cnf或者my.ini文件的log-slow-queries选项可以开启慢查询日志。通过long_query_time选项来设置时间值,时间以秒为单位。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志。将log-slow-queries选项和long_query_time选项加入到my.cnf或者my.ini文件的[mysqld]组中,形式如下:
# my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下) [mysqld]
log-slow-queries [=DIR \\ [filename] ] long_query_time=n
Slow就是慢查询日志。 17.5.2 查看慢查询日志
执行时间超过指定时间的查询语句会被记录到慢查询日志中。如果用户希望查询哪些查询语句的执行效率低,可以从慢查询日志中获得想要的信息。慢查询日志也是以文本文件的形式存储的。可以使用普通的文本文件查看工具来查看。
17.5.3 删除慢查询日志
慢查询日志的删除方法与通用查询日志的删除方法是一样的。可以使用mysqladmin命令来删除。也可以使用手工方式来删除。mysqladmin命令的语法如下: mysqladmin -u root -p flush-logs
执行该命令后,命令行会提示输入密码。输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除了。数据库管理员也可以手工删除慢查询日志。删除之后需要重新
启动MySQL服务。重启之后就会生成新的慢查询日志。如果希望备份旧的慢查询日志文件,可以将旧的日志文件改名。然后重启MySQL服务。 这里不在演示。 17.6 本章实例
本小节将对二进制日志进行实际的操作。本小节要求的操作如下:
(1)启动二进制日志功能,并且将二进制日志存储到C:\\目录下。二进制日志文件命名为binlog。 (2)启动服务后,查看二进制日志。
(3)然后向test数据库下的score表中插入两条记录。
(4)暂停二进制日志功能,然后再次删除score表中的所有记录。 (5)重新开启二进制日志功能。
(6)使用二进制日志来恢复score表。 (7)删除二进制日志。
(1)启动二进制日志功能,并且将二进制日志存储到C:\\目录下。二进制日志文件命名为binlog。
接下来查看它的内容:
(2)启动服务后,查看二进制日志。
(3)然后向test数据库下的score表中插入两条记录。
(4)暂停二进制日志功能,然后再次删除score表中的所有记录。
下面查看二进制文件,里面没有DELET语句
(5)重新开启二进制日志功能。
(6)使用二进制日志来恢复score表。
(7)删除二进制日志。 删除前有INSERT信息
执行删除命令后上面的日志信息就没有了。
17.7 上机实践
上机实践的要求如下:
(1) 将错误日志的存储位置设置为C:\\LOG目录下。
(2) 开启通用查询日志,并设置该日志存储在C:\\LOG目录下。
(3) 开启慢查询日志,并设置该日志存储在C:\\LOG目录下。设置时间值为5秒。
(4)查看错误日志、通用查询日志和慢查询日志。 先重起一下服务.
(5)删除错误日志。可以手动删除或用下面这个命令来删除:下面的命令一次性的也删除了通用查询日志和慢查询日志。
(6)删除通用查询日志和慢查询日志。 17.8 常见问题及解答
1.平时应该开启什么日志?
因为日志文件占用大量的磁盘空间,使用日志会占用内存会影响mysql运行的性能,因此很多公司都不开启日志文件,但对不同情况开启不同的日志文件,如果要查询哪些语句的执行效率很低,可以开启慢查询日志;如果需要记录数据库的改变可以开启二进制日志,注意错误日志是默认开启的,而且不能关闭。
2.如何使用二进制日志?
二进制日志主要记录mysql的变化,如果需要记录数据库的变化可以开启这个日志,二进制日志不仅可以查询而且还可以用来还原数据库,在备份mysql数据库之后把它开启,一旦数据库中的数据被损坏可以用备份的数据来还原然后二进制日志更新备份后的数据。 17.9 小结
本章介绍了日志的含义、作用和优缺点,然后介绍了二进制日志、错误日志、通用查询日志和慢查询日志的内容。本章的重点内容是二进制日志、错误日志和通用查询日志,因为这几种日志的使用频率比较高。二进制日志是本章的难点。二进制日志的查询方法与其它日志不同,需要读者特别注意。而且,二进制日志可以还原数据库。通过本章的学习,读者对MySQL日志会有深入的了解。下一章将为读者介绍MySQL数据库的性能优化。