mysql系统日志文件_Mysql日志文件和日志类型简介

9d514449e74519c41ffa2d4adb69c9c7.png

MySQL有几个不同的日志文件,可以帮助您了解mysqld内部发生的情况:

文件中记录的信息类型

错误日志

记录启动,运行或停止mysqld时发生的问题.

查询日志

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

更新日志

记录更改数据的语句. 不建议使用此日志.

二进制日志

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

慢速日志

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

默认情况下,所有日志均在mysqld数据目录中创建. 通过刷新日志,可以强制mysqld关闭并重新打开日志文件(或在某些情况下切换到新日志). 当您执行FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,将发生日志刷新.

错误日志

错误日志文件包含有关mysqld何时启动和停止以及何时在服务器操作期间发生任何严重错误的信息.

683bfa451888f10a1f0dd1ad721a1fcf.png

如果mysqld莫名其妙地死了,而mysqld_safe需要重启它,则mysqld_safe会在错误日志中写入一条重启的mysqld消息. 如果mysqld注意到需要自动检查或修复表,则会在错误日志中写入一条消息.

在某些操作系统中,如果mysqld死了,则错误日志包含堆栈跟踪信息. 跟踪信息可用于确定mysqld在何处死亡.

您可以使用--log-error [= file_name]选项指定mysqld将错误日志文件保存在何处. 如果未给出file_name值,则mysqld使用错误日志名称host_name.err并将日志文件写入数据目录. 如果执行FLUSH LOGS,则将错误日志重命名为-old后缀,并且mysqld创建一个新的空日志文件. (如果未指定--log-error选项日志创建分类,则不会重命名. )

如果未指定--log-error,或者(在Windows中)使用--console选项,则将错误写入标准错误输出stderr. 标准输出通常是您的终端.

常规查询日志

如果您想知道mysqld内部发生了什么,应该使用--log [= file_name]或-l [file_name]选项启动它. 如果没有为file_name提供值,则默认名称为host_name.log. 所有连接和语句都记录到日志文件中. 当您怀疑客户端上发生了错误并且想确切地知道客户端发送到mysqld的内容时,此日志非常有用.

mysqld按照接收到的顺序将语句记录到查询日志中. 这可能与执行顺序不同. 这与更新日志和二进制日志不同,它们是在执行查询之后但在释放任何锁之前记录的. (查询日志还包含所有语句,而二进制日志不包含仅查询数据的语句. )

服务器重新启动和日志刷新将不会生成新的常规查询日志文件(尽管关闭了刷新并重新打开了常规查询日志文件). 在Unix中,您可以使用以下命令重命名该文件并创建一个新文件:

复制代码,代码如下:

shell> mv hostname.log hostname-old.log

shell> mysqladmin flush-logs

shell> cp主机名-old.log到备份目录

shell> rm hostname-old.log

慢查询日志

当使用--log-slow-queries [= file_name]选项启动时,mysqld将写入一个日志文件,其中包含所有花费了超过long_query_time秒的时间的SQL语句. 获取初始表锁的时间不计为执行时间.

如果未提供file_name值,则默认为无主机名,后缀为-slow.log. 如果给出了文件名而不是绝对路径名,那么该文件将被写入数据目录.

b11b074a26b3e9b93ec00b122f6a00e4.png

执行该语句并释放所有锁后,它将记录在慢查询日志中. 记录顺序可能与执行顺序不同.

慢速查询日志可用于查找长时间运行的查询,并可用于优化. 但是,检查长而慢的查询日志可能很困难. 为了简化操作,可以使用mysqldumpslow命令获取日志中显示的查询摘要,以处理慢速查询日志.

在MySQL 5.1慢查询日志中日志创建分类,不使用索引的慢查询记录为使用索引的查询. 为了防止不使用索引的慢速查询记录在慢速查询日志中,请使用--log-short-format选项.

在MySQL 5.1中,通过--log-slow-admin-statements服务器选项,您可以请求将慢速管理语句(如OPTIMIZE TABLE,ANALYZE TABLE和ALTER TABLE)写入慢速查询日志.

查询缓存处理的查询不会添加到慢速查询日志中,并且由于表具有零行或一行而不能从索引中受益的查询不会写入慢速查询日志.

二进制日志

二进制文件介绍

二进制日志以更有效的格式和事务安全的方式包含更新日志中可用的所有信息.

二进制日志包含具有更新数据或潜在更新数据的所有语句(例如,没有与任何行匹配的DELETE). 语句以“事件”的形式保存,用于描述数据更改.

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

二进制文件行为

二进制日志还包含有关更新的每个语句的执行时间的信息. 它不包含未修改任何数据的语句. 如果要记录所有语句(例如,确定有问题的查询),则应使用常规查询日志.

二进制日志的主要目的是使能够在恢复期间进行最大程度的更新,因为二进制日志包含备份后进行的所有更新.

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

如果在运行服务器时启用了二进制日志记录,则性能将降低约1%. 但是,用于恢复并允许复制设置的二进制日志记录的好处超过了这种小的性能损失.

二进制文件路径

TB27_uhfRU4h1JjSZFLXXaFMpXa_%21%212354703767.jpg

当使用--log-bin [= file_name]选项启动时,mysqld将写入所有包含更新数据的SQL命令的日志文件. 如果未提供file_name值,则默认名称是主机名,后跟-bin. 如果给出了文件名但不包括路径,则文件将被写入数据目录. 建议指定文件名.

如果您在日志名称中提供扩展名(例如--log-bin = file_name.extension),则该扩展名会被悄悄删除并忽略.

mysqld在每个二进制日志名称后添加一个数字扩展名. 每次启动服务器或刷新日志时,此数字都会增加. 如果当前日志大小达到max_binlog_size,则还将自动创建一个新的二进制日志. 如果您使用的是大型事务,则二进制日志也将超过max_binlog_size: 事务全部写入一个二进制日志,而永远不会写入另一个二进制日志.

为了能够知道使用了哪个不同的二进制日志文件,mysqld还创建了一个二进制日志索引文件,该文件包含所有使用的二进制日志文件的文件名. 默认情况下,它与二进制日志文件具有相同的文件名,扩展名为“ .index”. 您可以使用--log-bin-index [= file_name]选项更改二进制日志索引文件的文件名. 当mysqld运行时,您不应该手动编辑该文件. 如果这样做,将使mysqld感到困惑.

二进制日志选项

您可以使用以下mysqld选项来影响二进制日志中记录的内容. 另请参阅选项后面的讨论.

-binlog-do-db = db_name

告诉主服务器,如果当前(即USE选择的)是db_name,则更新应记录在二进制日志中. 所有其他未明确指定的将被忽略. 如果使用此选项,则应确保仅更新当前.

CREATE DATABASE,ALTER DATABASE和DROP DATABASE语句有一个例外,即确定该语句是否应由运行中的记录而不是使用当前记录.

一个无法按预期执行的示例: 如果使用binlog-do-db = sales启动服务器并执行USE价格;更新sales.january SET数量=数量+ 1000;该语句未写入二进制日志.

-binlog-ignore-db = db_name

告诉主服务器,如果当前(即USE选择的)是db_name,则不应将更新保存在二进制日志中. 如果使用此选项,则应确保仅更新当前.

一个未按预期执行的示例: 如果服务器以binlog-ignore-db = sales启动并执行USE价格;更新sales.january SET数量=数量+ 1000;该语句未写入二进制日志.

类似于--binlog-do-db,CREATE DATABASE,ALTER DATABASE和DROP DATABASE语句有一个例外,即该语句是否应由正在操作的而不是当前记录

要记录或忽略多个,请使用多个选项并为每个指定相应的选项.

服务器根据以下规则评估选项,以便将更新记录在二进制日志中或忽略它. 请注意,CREATE / ALTER / DROP DATABASE语句有一个例外. 在这种情况下,创建,修改或删除的将根据以下规则替换当前.

0c72d8c8891170193416da2aa97bb0ae.png

1. 是否有binlog-do-db或binlog-ignore-db规则?

否: 将语句写入二进制日志并退出.

是: 转到下一步.

2. 有一些规则(binlog-do-db或binlog-ignore-db或两者都有). 当前有一个(USE是否选择一个?)?

否: 请勿编写语句并退出.

是: 转到下一步.

3. 当前有一个. 有binlog-do-db规则吗?

·是: 当前是否符合binlog-do-db规则?

o: 编写语句并退出.

不,不要写声明并退出.

·否: 执行下一步.

4. 有一些binlog-ignore-db规则. 当前是否符合binlog-ignore-db规则?

是: 请勿编写语句并退出.

·否: 编写查询并退出.

例如,仅使用binlog-do-db = sales运行的服务器不会将当前未销售到二进制日志的语句写入(换句话说,binlog-do-db有时可能意味着“忽略其他” “).

如果要复制,则应确保从属服务器未使用旧的二进制日志文件,然后再删除它们.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-215592-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值