有志者,事竟成
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
文章目录
前言
MySQL日志是记录MySQL数据库的日常操作和错误信息的文件。MySQL中,日志可以分为二进制日志、错误日志、通用查询日志和慢查询日志。分析这些日志文件,可以了解MySQL数据库的运行情况、日常操作、错误信息和哪些地方需要进行优化。
一、日志简介
MySQL日志可以分为4种,分别是二进制日志、错误日志、通用查询日志和慢查询日志。下面分别简单地介绍这4种日志文件的作用。
二进制日志:以二进制文件的形式记录了数据库中的操作,但不记录查询语句。
错误日志:记录MySQL服务器的启动、关闭和运行错误等信息。
通用查询日志:记录用户登录和记录查询的信息。
慢查询日志:记录执行时间超过指定时间的操作。
除二进制日志外,其他日志都是文本文件。日志文件通常存储在MySQL数据库的数据目录下。默认情况下,只启动了错误日志的功能。其他3类日志都需要数据库管理员进行设置。
二、二进制日志
二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况。通过二进制日志可以查询MySQL数据库中进行了哪些改变。
1、启动和设置二进制日志
默认情况下,二进制日志功能是关闭的。通过my.cnf或者my.ini文件的log-bin选项可以开启二进制日志。将log-bin选项加入到my.cnf或者my.ini文件的[mysqld]组中,形式如下:
[mysqld]
log-bin [=DIR \ [filename]]
其中,DIR参数指定二进制文件的存储路径;filename参数指定二进制文件的文件名,其形式为filename.number,number的形式为000001、000002等。每次重启MySQL服务后,都会生成一个新的二进制日志文件,这些日志文件的“number”会不断递增。除了生成上述文件外,还会生成一个名为filename.index的文件。这个文件中存储所有的二进制日志文件的清单。
使用技巧:
二进制日志与数据库的数据文件最好放在两块不同的硬盘上,这样即使数据库文件所在的清盘被破坏,也可以使用另一块硬盘上的二进制日志来恢复数据库文件。两块硬盘同时坏了的可能性要小得多。这样可以保证数据库中数据的安全。
如果没有DIR参数和filename参数,二进制日志将默认存储在数据库的数据目录下。默认的文件名为hostname-bin.number,其中hostname表示主机名。
2、查看二进制日志
使用二进制格式可以存储更多的信息,并且可以使写入二进制日志的效率更高。但是,不能直接打开并查看二进制日志。如果需要查看二进制日志,必须使用mysqlbinlog命令。mysqlbinlog命令的语法形式如下:
mysqlbinlog filename.number
mysqlbinlog命令将在当前文件夹下查找指定的二进制日志。因此需要在二进制日志filename.number所在的目录下运行该命令,否则将会找不到指定的二进制日志文件。
3、删除二进制日志
二进制日志会记录大量的信息。如果很长时间不清理二进制日志,将会浪费跟多的磁盘空间。删除二进制日志的方法很多。下面介绍。
1、删除所有二进制的日志
使用reset master语句可以删除所有二进制日志。该语句的形式如下:
reset master
登录mysql数据库后,可以执行该语句来删除所有二进制日志。删除所有二进制日志后,mysql将会重新创建新的二进制日志。新二进制日志的编号从000001开始,如mylog.000001。
2、根据编号来删除二进制的日志
每个二进制日志文件后面有一个6位数的编号,如000001。使用purge master logs to语句,可以删除指定的二进制日志的编号之前的日志。该语句的基本语法形式如下:
purge master logs to 'filename.number';
该语句将删除编号小于这个二进制日志的所有二进制日志。
下面删除mylog.000004之前的二进制的日志,代码如下:
purge master logs to 'mylog.000004';
代码执行完后,编号为000001、000002和000003的二进制日志将被删除。
3、根据创建时间来删除二进制日志
使用purge master logs before语句,可以删除指定时间之前创建的二进制日志。该语句的基本语法形式如下:
purge master logs before 'yyyy-mm-dd hh:MM:ss';
其中,“hh”表示24表示制的小时。该语句将删除在指定时间之前创建的所有二进制日志。
4、使用二进制日志还原数据库
二进制日志记录了用户对数据库中数据的改变。如insert语句、update语句、create语句等都会记录到二进制日志中。一旦数据库遭到破坏,可以使用二进制日志来还原数据库。
如果数据库遭到意外损坏,首先应该使用最近的备份文件来还原数据库。备份之后,数据库可能进行了一些更新。这可以使用二进制日志来还原。因为二进制日志中存储了更新数据库的语句,如update语句、insert语句等。二进制日志还原数据库的命令如下:
mysqlbinlog filename.number | mysql -u root -p
这个命令可以这样理解:使用mysqlbinlog命令来读取filename.number中的内容,然后,使用mysql命令将这些内容还原到数据库中。
知识点:二进制日志虽然可以用来还原mysql数据库,但是其占用的磁盘空间也是非常大的。因此,在备份mysql数据库之后,应该删除备份之前的二进制日志。如果备份之后发生异常,造成数据库的数据丢失,可以通过备份之后的二进制日志进行还原。
5、暂时停止二进制日志功能
在配置文件中设置了log-bin选项以后,mysql服务器将会一直开启二进制日志功能。删除该选项后就可以停止二进制日志功能。如果需要再次启动这个功能,又需要重新添加log-bin选项。mysql中提供了暂时停止二进制日志功能的语句。
如果用户不希望自己执行的某些sql语句记录在二进制日志中, 那么需要在执行这些sql语句之前暂停二进制日志功能。用户可以使用set语句来暂停二进制日志功能。set语句的代码如下:
set sql_log_bin = 0;
执行该语句后,mysql服务器会暂停二进制日志功能。但是,只有拥有super权限的用户才可以执行该语句。如果用户希望重新开启二进制日志功能,可以使用下面的set语句。
set sql_log_bin = 1;
三、错误日志
错误日志是mysql数据库中最常用的一种日志。错误日志主要用来记录mysql服务的开启、关闭和错误信息。
1、启动和设置错误日志
在mysql数据库中,错误日志功能是默认开启的。而且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件夹下。错误日志文件通常的名称为hostname.err。其中,hostname表示mysql服务器的主机名。错误日志的存储位置可以通过log-error选项来设置。将log-error选项加入到my.ini或者my.cnf文件的【mysqld】组中,形式如下:
log-error=DIR / [filename]
其中,DIR参数指定错误日志的路径。filename参数是错误日志的名称,没有该参数时默认为主机名。重启mysql服务后,这个参数开始生效,可以在指定路径下看到filename.err的文件;如果没有指定filename,那么错误日志将直接默认为hostname.err。
2、查看错误日志
错误日志中记录着开启和关闭mysql服务的时间,以及服务运行过程中出现哪些异常等信息。如果mysql服务出现异常,可以到错误日志中查找原因。
错误日志是以文本文件的形式存储的,可以直接使用普通文本工具就可以查看。windows操作系统可以使用文本文件查看器查看。在linux操作系统下,可以使用vi工具或者使用gedit工具来查看。
3、删除错误日志
数据库管理员可以删除很长时间之前的错误日志,以保证mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令来开启新的错误日志。mysqladmin命令的语法如下:
mysqladmin -u root -p flush-logs
执行该命令后,数据库系统会自动创建一个新的错误日志。旧的错误日志仍然保留着,只是已经更名为filename.err-old。
除了mysqladmin命令外,也可以使用flush logs语句来开启新的错误日志。使用该语句之前必须先登录到mysql数据库中。创建好新的错误日志之后,数据库管理员可以将旧的错误日志备份到其他的硬盘上。如果数据库管理员认为filename.err-old已经没有存在的必要,可以直接删除。
四、通用查询日志
通用查询日志是用来记录用户的所有操作,包括启动和关闭mysql服务、更新语句和查询语句等。
1、启动和设置通用查询日志
默认情况下,通用查询日志功能是关闭的。通过my.cnf或者my.ini文件的log选项可以开启通用查询日志。将log选项加入到my.cnf或者my.ini文件的[mysqld]组中。形式如下:
log [=DIR \ [filename]]
其中,DIR参数指定通用查询日志的存储路径;filename参数指定日志的文件名。如果不指定存储路径,通用查询日志将默认存储到mysql数据库的数据文件夹下。如果不指定文件名,默认文件名为hostname.log。hostname是mysql服务器的主机名。
2、查看通用查询日志
用户的所有操作都会记录导通用查询日志中。如果希望了解某个用户最近的操作,可以查看通用查询日志。通用查询日志是以文本文件的形式存储的。windows操作系统可以使用文本文件查看器查看。linux操作系统下,可以使用vi工具或者使用gedit工具来查看。
3、删除通用查询日志
通用查询日志会记录用户的所有操作。如果数据库的使用非常频繁,那么通用查询日志将会占用 非常大的磁盘空间。数据库管理员可以删除很长时间之前的通用查询日志,以保证mysql服务器上的硬盘空间。
mysql数据库中,也可以使用mysqladmin命令来开启新的通用查询日志。新的通用查询日志会直接覆盖旧的查询日志,不需要再手动删除了。mysqladmin命令的语法如下:
mysqladmin -u root -p flush-logs
如果希望备份旧的通用查询日志,那么就必须先将旧的日志文件拷贝出来或者改名。然后,再执行上面的mysqladmin命令。
除了上述方法以外,可以手工删除通用查询日志。删除之后需要重新启动mysql服务。重启之后就会生成新的通用查询日志。如果希望备份旧的日志文件,可以将旧的日志文件改名,然后重启mysql服务。
五、慢查询日志
慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。
1、启动和设置慢查询日志
默认情况下,慢查询日志功能是关闭的。通过my.cnf或者my.ini文件的log-slow-queries选项可以开启慢查询日志。通过long_query_time选项来设置时间值,时间以秒为单位。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志。将log-slow-queries选项和long_query_time选项加入到my.cnf或者my.ini文件的[mysqld]组中。形式如下:
log-slow-queries [=DIR \ [filename]]
long_query_time=n
其中,DIR参数指定慢查询日志的存储路径;filename参数指定日志的文件名,生成日志文件的完整名称为filename-slow.log。如果不指定文件名,默认文件名为hostname-slow.log,hostname是mysql服务器的主机名。“n”参数是设定的时间值,该值的单位是秒。如果不设置long_query_time选项,默认时间为10秒。
2、查看慢查询日志
执行时间超过指定时间的查询语句会被记录到慢查询日志中。如果用户希望查询哪些查询语句的执行效率低,可以从慢查询日志中获得想要的信息。慢查询日志也是以文本文件的形式存储的。可以使用普通的文本文件查看工具来查看。
3、删除慢查询的日志
慢查询日志的删除方法与通用查询日志的删除方法是一样的。可以使用mysqladmin命令来删除。也可以使用手工方式来删除。mysqladmin命令的语法如下:
mysqladmin -u root -p flush-logs
执行该命令后,命令行会提示输入密码。输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除了。数据库管理员也可以手工删除慢查询日志,删除之后需要重新启动mysql服务,重启之后就会生成新的慢查询日志。如果希望备份旧的慢查询日志文件,可以将旧的日志文件改名,然后重启mysql服务。
注意:通用查询日志和慢查询日志都是使用这个命令,使用时一定要注意。一旦执行这个命令,通用查询日志和慢查询日志都只存在新的日志文件中。如果希望备份旧的慢查询日志,必须先将旧的日志文件复制出来或者改名。然后,再执行上面的mysqladmin命令。
六、总结
这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。