MySQL--MySQL 日志

在 MySQL中,有 4 种不同的日志,分别是错误日志、二进制日志(BINLOG 日志)、查询日志和慢查询日志。

1.错误日志

错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。

可以用 --log-error[=file_name] 选项来指定 mysqld(MySQL 服务器)保存错误日志文件的位置。如果没有给定 file_name值,mysqld 使用错误日志名 host_name.err(host_name 为主机名)并默认在参数 DATADIR(数据目录)指定的目录中写入日志文件。

2.二进制文件

二进制日志(BINLOG)记录了所有的 DDL(数据定义语言) 语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。语句以“事件”的形式保存,它描述了数据的更改过程。此日志对于灾难时的数据恢复起着极其重要的作用。

2.1日志的位置和格式

当用 --log-bin[=file_name] 选项启动时,mysqld 开始将数据变更情况写入日志文件。如果没有给出 file_name 值,默认名为主机名跟“-bin”。如果给出了文件名,但没有包含路径,则文件默认被写入参数 DATADIR(数据目录)指定的目录。

MySQL 5.5 中,二进制日志的格式分为 3 种:STATEMENT、ROW、MIXED,可以在启动时通过参数 --binlog_format 进行设置,这 3 种格式的区别如下。

  • STATEMENT

MySQL 5.1 之前的版本都采用这种方式。顾名思义,日志中记录的偶素是语句(statement),每一条对数据造成修改的 SQL 语句都会记录在日志中,通过 mysqlbinlog 工具,可以清晰的看到每条语句的文本。主从复制的时候,从库(slave)会将日志解析为原文本,并在从库重新执行一次。

这种格式的优点是日志记录清晰易读、日志量少,对 I/O 影响较小。

缺点是某些情况下 slave 的日志复制会出错。

  • ROW

MySQL 5.1.11 之后,出现了这种新的日志格式。它将每一行的变更记录到日志中,而不是记录 SQL 语句。

这种格式的优点是会记录每一行数据的变化细节,不会出现某些情况下无法复制的情况。

缺点是日志量大,对 I/O 影响较大。

  • MIXED

这是目前 MySQL 默认的日志格式,即混合了 STATEMENT 和 ROW 两种日志。默认情况下采用 STATEMENT,但在一些特殊情况下采用 ROW 来进行记录,比如采用 NDB 存储引擎,此时对表的 DML 语句全部采用 ROW;客户端使用了临时表;客户端采用了不确定函数,比如 current_user() 等,因为这种不确定函数在主从中得到的值可能不同,导致主从数据产生不一致。MIXED 格式能尽量利用两种模式的优点,而避开它们的缺点。

注意:可以在 global 和 session 级别对 binlog_format 进行日志格式的设置,但一定要谨慎操作,确保从库的复制能够正常进行。

2.2日志的读取

由于日志以二进制的方式存储,不能直接读取,需要用 mysqlbinlog 工具来查看,语法如下:

1     shell > mysqlbinlog log-file;

如果日志是 ROW 格式,则 mysqlbinlog 解析后是一堆无法读懂的字符。此时可以加上 -v 或者 -vv 参数进行读取。

2.3日志的删除

方法1

执行

      RESET MASTER;

命令,该命令将删除所有 BINLOG 日志,新日志编号从 000001 开始。

方法2

执行

      PURGE MASTER LOGS TO ‘mysql-bin.******‘

命令,该命令将删除 “******” 编号之前的所有日志。

方法3

执行

      PURGE MASTER LOGS BEFORE ‘yyyy-mm-dd hh24:mi:ss‘

命令,该命令将删除指定日志之前产生的所有日志。

方法4

设置参数 --expire_logs_days=#,此参数的含义是设置日志的过期天数,过了指定的天数后日志将会被自动删除,这样将有利于减少 DBA 管理日志的工作量。

触发日志文件更新:

      mysqladmin flush-log

2.4其他选项

二进制日志由于记录了数据的变化过程,对于数据的完整性和安全性起着非常重要的作用。因此,MySQL 还提供了一些其他参数选项来进行更小粒度的管理。

      --binlog-do-db=db_name:该选项告诉主服务器,如果当前的数据库(即 USE 选定的数据库)是 db_name,应该更新记录到二进制日志中。其他所有没有显式指定的数据库更新将被忽略,不记录在日志中。

      --binlog-ignore-db=db_name:该选项告诉服务器,如果当前的数据库(即 USE 选定的数据库)是 db_name,不应该将更新保存到二进制日志中,其他没有显式忽略的数据库都将进行记录。

如果想记录或忽略多个数据库,可以对上面两个选项分别使用多次,即对每个数据库指定相应的选项。

      --innodb-safe-binlog:此选项经常和 --sync-binlog=N(每写 N 次日志同步磁盘)一起配合使用,使得事务在日志的记录更加安全。

      SET SQL_LOG_BIN=0:具有 SUPER 权限的客户端可以通过此语句禁止将自己的语句记入二进制记录。这个选项在某些环境下是有用的,但是使用时一定要小心,因为它很可能造成日志记录的不完整或者在复制环境中造成主从数据的不一致。

时间: 2024-10-11 10:42:18

MySQL--MySQL 日志的相关文章

mysql热备及查询mysql操作日志

mysql热备 1 查看mysql版本,保证主库低于等于从库 2 主库配置:   A 需要打开支持日志功能:log-bin=mysql-bin   B 提供server-id:server-id=1   C 重启mysql,进入后,分配复制从库的帐号 GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'backip' IDENTIFIED BY 'repuser';   D show master status;能看到二进制日志文件目前的Position  

MySQl Study学习之--MySQl二进制日志管理

MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log):   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库(DML)的语句的执行时间信息    不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能    主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新    用于在主复制服务器上记录所有将发送

mysql 的日志文件

mysql的日志文件 日志文件大致分为  error log, binary log, query log, slow query log, innodb redo log ;如图: 1.error log the error log file contains information indicating when mysqld was started and stopped also any critical errors that occur while the server is run

MySQL 错误日志(Error Log)

同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定义mysqld内部发生的事情,数据库性能故障,记录数据的变更历史,用户恢复数据库等等.本文主要描述错误日志文件. 1.MySQL日志文件系统的组成   a.错误日志:记录启动.运行或停止mysqld时出现的问题.   b.通用日志:记录建立的客户端连接和执行的语句.   c.更新日志:记录更改数据的语句.该日志在M

CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器

一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取,所以LogAnalyzer不需要改变现有的记录架构.基于当前的日志数据,它可以处理syslog日志消息,Windows事件日志记录,支持故障排除,使用户能够快速查找日志数据中看出问题的解决方案. LogAnalyzer 获取客户端日志会有两种保存模式,一种是直接读取客户端/var/log/目录下的

mysql二进制日志

mysql二进制日志称为binlog,记录了数据库修改数据的操作,可以用作数据恢复. binlog有三种记录方式 1.statement 记录修改数据的原始sql,IO量较小.sql中存在使用user()等依赖运行环境的函数时,可能导致数据恢复不正确. 2.row 记录每行数据的修改动作,IO较大,准确性最高,生产环境推荐使用这种模式. 3.mixed 上述两种模式混合使用. binlog参数设置 1.log_bin 只读参数,只能在my.ini(my.cnf)中设置,log_bin的值为二进制

MySQL的日志

Error log:错误日志 Query Log:查询日志    general query log/slow query log:超过设定时间(long_query_time)或者没走索引的语句 Binary Log:二进制日志,记录数据被修改的相关信息 开启查询日志(一般不开): mysql> show variables like 'general_log%'; +------------------+---------------------------+ | Variable_name

MySQL二进制日志(binary log)总结

本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 今天无意中发现了一个云栖社区举行的MySQL“第一季:挑战玄惭之 慢SQL性能优化赛”,在测试服务器上执行其测试脚本写入数据的时候报错提示如下,Multi-statement transaction required more than 'max_binlog_cache_

MySQL之日志管理(一)

MySQL的日志有以下六种: 错误日志:服务器启动.关闭.运行中产生的错误信息.及event(事件调度)运行一个事件时产生的信息.及从服务器上启动和关闭从服务器进程时产生的信息. 一般查询日志:general_log.general_log_file. 慢查询日志:查询时间超过指定的查询时间的记录 二进制日志:任何引起或者可能引起数据变化的操作都要记录进二进制日志(DDL.DML.DCL语句):二进制日志又叫做几十点还原,可在server崩溃后将数据还原到崩溃的那一刻. 中继日志:中继日志就是从

MySQL错误日志总结

MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息.错误日志的命名通常为hostname.err.其中,hostname表示服务器主机名. The error log contains information indicating when mysqld was started and stopped and also any critical errors that occur while the server is running.