日志文件类型

MySQL有几个不同的日志文件,可以帮助你找出在mysqld时发生的事:







日志文件



文件中的信息类型





错误日志



记录发生的问题,当你开始,运行,或停止mysqld。





查询日志



记录已建立的客户端连接和执行的语句。





更新日志



记录数据变化的语句。此日志不利于使用此日志。





二进制日志



记录所有更改数据的语句,也用于复制。





慢日志



记录所有查询long_query_time秒所有的执行时间或不使用索引的查询。






默认情况下,所有的日志是在mysqld数据目录创建。通过刷新日志,你可以强制mysqld关闭并重新打开日志文件(或在某些情况下,切换到一个新的日志)。当你执行一个刷新日志语句或执行mysqladmin刷新日志或mysqladmin刷新日志刷新发生。

错误日志

错误日志文件包含有关当mysqld启动和停止,和服务器的运行过程中发生严重错误时。

如果mysqld死得不明不白,mysqld_safe需要重启,重启mysqld消息mysqld_safe写入错误日志。如果mysqld指出,自动检查或表需要修复,消息写入错误日志。

在某些操作系统中,如果他死了,错误日志包含堆栈跟踪信息,跟踪信息可以用来确定mysqld死了。

——日志错误{ = file_name }选项可以用来指定位置的mysqld保存错误日志文件。如果不给予file_name值,mysqld使用错误日志的名字host_name.err并写入日志文件中的数据目录。如果你执行刷新日志,错误日志重命名为后缀与老和mysqld创建新的空日志文件。(如果--日志错误选项不是给定的,它不会改名)。

如果你不指定日志错误,或(Windows)如果你使用--console选项,错误写入标准错误输出stderr。通常的标准输出是你的终端。

通用查询日志

如果你想知道里面发生了什么你应该启动mysqld,它与原木{ = file_name }或{ }我file_name选项。如果没有给出file_name值,默认的名字是host_name.log.all连接和语句都记录到日志文件中,日志可能是有用的当你怀疑客户的错误,要知道客户端发送到mysqld。

mysqld记录语句的顺序接收的查询记录,这可能不同于执行顺序。这是由不同的更新日志和二进制日志,记录日志之前执行的查询,但锁的任何一个之前被释放。(查询日志中还包含所有陈述,和二进制日志不包含报表,查询数据)。

服务器重新启动和日志刷新不会生成一个新的通用查询日志文件(尽管已关闭了刷新,一般查询日志文件已重新打开)。在UNIX中,您可以通过以下命令重命名文件并创建新文件:

复制代码代码如下所示:

hostname.log hostname-old.log壳> MV

壳> mysqladmin刷新日志

壳> CP hostname-old.log备份目录

RM hostname-old.log壳>



慢查询日志

启动时,慢速查询日志{ = file_name }选项,mysqld写入日志文件包含所有SQL语句在long_query_time秒所有的执行时间。时间获得初始表锁不能算作执行时间。

如果不给予file_name值,默认的主机名是默认的后缀是-slow.log.if文件名称是给定的,但不是绝对路径名,文件写入数据目录。

语句完成,释放后所有锁都被释放到慢速查询日志中。

慢查询日志可以用来发现有长的执行时间,可用于优化查询。然而,很难检查长和慢查询日志。更容易,你可以使用mysqldumpslow命令来查询汇总在日志显示处理慢查询日志。

在MySQL 5.1的慢速查询日志中,不使用索引的慢查询与使用索引的查询记录相同。为了防止不使用索引的慢查询,请使用慢日志格式选项记住慢查询日志。

在MySQL 5.1中,通过慢日志管理服务器选项,您可以请求慢速管理语句,如优化表、分析表和更改表以写入慢查询日志。

查询缓存处理的查询不会添加到慢速查询日志中,因为具有零行或行的查询不能从查询中获益或写入慢的查询日志。

二进制日志

二进制文件的介绍

二进制日志的格式更为有效,它是一种事务安全的方式,用于包含更新日志中可用的所有信息。

二进制日志包含更新数据或更新数据的所有语句(例如,删除不匹配任何行)。语句以事件的形式保存,它描述数据的变化。

注意:二进制日志已经替换了旧的更新日志,并且更新日志不再在MySQL 5.1中使用。

二进制文件的行为

二进制日志还包含关于每个更新数据库语句的执行时间信息。它不包含不修改任何数据的语句。如果要记录所有语句(例如为了识别有问题的查询),您应该使用一般查询日志。

二进制日志的主要目的是将数据库恢复到尽可能大的更新,因为二进制日志包含备份之后所做的所有更新。

二进制日志还用于记录将在主复制服务器上发送到从服务器的所有语句。

当在服务器运行时启用二进制日志时,性能大约为1%。然而,二进制日志的好处被用来恢复并允许集合复制超过这个小的性能损失。

二进制文件的文件路径

启动时,日志本{ = file_name }选项,mysqld致信包含所有更新数据的SQL命令日志文件。如果不给予file_name值,默认名称是主机名称,其次是-bin.if文件名字但路径不包含文件写入数据目录。建议指定一个文件名。

如果你提供了一个扩展(例如,日志本= file_name。扩展)在日志名称,扩展名是悄悄地被忽略。

mysqld添加数字延伸到每个二进制日志名称,数量的增加,每一次当你启动服务器或刷新日志。如果当前日志的大小取决于max_binlog_size,一个新的二进制日志将被自动创建。如果您使用的是大型交易,二进制日志将超过max_binlog_size:交易必须写为一个二进制日志,并不会写入不同的二进制日志。

为了知道二进制日志文件的使用,他还创建了一个二进制日志索引文件,其中包含所有的二进制文件的文件名,默认情况下,该文件的名称为二进制日志文件相同,且延伸。指数。您可以更改文件名二进制日志索引文件与原木仓指数{ = file_name }选项。当mysqld正在运行,文件不应该手动编辑;如果这样做,mysqld会迷茫。

二进制日志选项

下列mysqld选项可以用来影响内容已知二进制日志。又见讨论后面的选项。

——binlog-do-db = db_name

告诉主服务器,如果当前的数据库(即,使用选定的数据库)是db_name,更新应该被记录在二进制日志。所有其他的数据库是没有明确指定被忽略。如果你使用这个选项,你应该确保只有当前数据库的更新。

对于创建数据库、更改数据库和删除数据库语句,有一个例外,那就是决定记录是否应该通过操作的数据库记录,而不是使用当前数据库。

一个例子是不能实现预期:如果binlog-do-db =销售用于启动服务器,并执行价格;更新sales.january设置金额=金额+ 1000;这句话没有写入二进制日志。

——binlog-ignore-db = db_name

告诉主服务器,如果当前的数据库(即,使用选定的数据库)是db_name,更新不应该保存到二进制日志。如果你使用这个选项,你应该确保只有当前数据库的更新。

例:根据你的期望执行不能:如果服务器启动binlog-ignore-db =销售,并执行价格,更新sales.january设置金额=金额+ 1000,声明没有写入二进制日志。

类似——binlog-do-db,具有创建数据库的一个例外,修改数据库和删除数据库表,这是决定是否记录应记录操作数据库而不是使用当前数据库。

若要记录或忽略多个数据库,请使用多个选项为每个数据库指定适当的选项。

服务器根据以下规则对选项进行评估,以便更新记录在二进制日志中或被忽略。请注意,在创建数据库语句时有一个例外。在这些情况下,基于以下规则,创建、修改或删除的数据库将替换当前数据库。

1。是否存在binlog-do-db或binlog-ignore-db规则

不:将语句写入二进制日志并退出。

是的,执行下一步。

2。有一些规则(包括binlog-do-db或binlog-ignore-db两)。目前有一个数据库(是否使用已选定的数据库)

不:不要写语句,然后退出。

是的,执行下一步。

三.有了一个新的数据库。是否有binlog-do-db规则

是的:无论当前的数据库匹配binlog-do-db规则

o:写一个声明并退出。

o:不要写语句,退出。

不:执行下一步。

4。有一些binlog-ignore-db规则。不管当前数据库匹配binlog-ignore-db规则

有:不要写声明,然后退出。

不:写查询并退出。

例如,一个服务器上运行binlog-do-db =销售不写二进制陈述当前数据库不销售。换句话说,binlog-do-db有时意味着忽视其他数据库。

如果您正在复制,您应该确保旧的二进制日志文件不在服务器上使用,并且可以删除它们。