MySQL数据库日志介绍

第1章 binlog日志

1.1 binlog日志介绍

MySQL的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库查询的语句如show,select开头的语句,不会被binlog日志记录。binlog日志只要用于数据库的增量恢复,以及主从复制。

mysql数据目录下的如下文件就是mysql的binlog日志:

[[email protected] ~]# ll /data/3306/
total 88
-rw-rw---- 1 mysql mysql   703 Feb  3 14:21 mysql-bin.000001        #<==binlog日志文件
-rw-rw---- 1 mysql mysql   126 Feb  3 14:23 mysql-bin.000002
-rw-rw---- 1 mysql mysql   126 Feb  3 14:24 mysql-bin.000003
-rw-rw---- 1 mysql mysql   479 Feb  3 14:36 mysql-bin.000004
-rw-rw---- 1 mysql mysql   477 Feb  3 14:39 mysql-bin.000005
-rw-rw---- 1 mysql mysql 18699 Feb  4 03:05 mysql-bin.000006
-rw-rw---- 1 mysql mysql   150 Feb  4 03:05 mysql-bin.000007
-rw-rw---- 1 mysql mysql 13334 Feb  4 04:08 mysql-bin.000008

1.2 binlog日志功能的开启

需要在配置文件my.cnf中打开log-bin功能,才会生成对应的binlog日志文件

[[email protected] 3306]# grep "log-bin" /data/3306/my.cnf
[mysqld]
log-bin = /data/3306/mysql-bin      #<==在mysqld配置里面添加log-bin功能

查看bin-log功能开启状况:

mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | ON    |             #<==记录binlog开关
| log_bin_trust_function_creators | OFF   |
| sql_log_bin                     | ON    |             #<==临时不记录binlog开关
+---------------------------------+-------+
3 rows in set (0.00 sec)

临时不记录bin-log:

mysql> set session sql_log_bin = OFF;

1.3 binlog日志的三种模式

1.3.1 Row Level

日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改。

优点:在row level模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录哪一条记录被修改了,修改成什么样了。所以row level的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程或function,以及trigger的调用和触发无法被正确复制的问题。

缺点:row level下,所有的执行语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如有一条这样的update语句:update product set owner_member_id=‘b’ where owner_member_id=’a’,执行了之后,日志中记录的不是这条update语句所对应的事件(MySQL以事件的形式来记录bin-log日志),而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的时间。自然,bin-log日志的量就会很大。尤其是当执行alter table之类的语句的时候,产生的日志量是惊人的,因为MySQL对于alter table之类的表结构变更语句的处理方式是整个表的每一条记录都需要变动,实际上就是重建了整个表,那么该表的每一条记录都会被记录到日志中。

1.3.2 Statement Level

每一条会修改数据的sql都会记录到master的bin-log中。slave在复制的时候sql进程会解析成和原来master端执行过程相同的sql来再次执行。

优点:statement level下的优点首先就是解决了row level下的缺点,不要需要记录每一行数据的变化,减少bin-log日志量,节约IO,提高性能。因为它只需要记录在master上所执行的语句细节,以及执行语句时候的上下文信息。

缺点:由于他是记录的执行语句,所以,为了让这些语句在slave端也能正确执行,那么它还必须记录每条语句在执行时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端被执行的时候能够得到和在master端执行时候相同的结果。另外就是,由于MySQL发展很快,很多新功能不断的加入,使MySQL的复制遇到了不小的挑战。自然复制的时候涉及到的内容越复杂,bug也就越容易出现。在statement level下,目前已经发现的就有不少情况会照成MySQL的复制出现问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如sleep()函数在有些版本中就不能正确复制;在存储过程中使用了last_insert_id()函数,就可能会使slave和master上得到不一致的id等等。由于row level是基于每一行来记录的变化,所以不会出现类似的问题。

1.3.3 Mixed

实际上就是前两种模式的结合。在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在statement和Row之间选择一种。新版本中的statement level还是和以前一样,仅仅记录执行的语句。而新版本的MySQL中对row level模式也做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。

1.3.4 如何选择使用binlog的模式

1、互联网公司,使用MySQL的功能相对少(存储过程、触发器、函数)

选择默认的语句模式,statement Level模式

2、如果用到MySQL的特殊功能(存储过程、触发器、函数)则选择Mixed模式。

3、公司如果用到使用MySQL的特殊功能(存储过程、触发器、函数),数据最大化一致,此时最好行模式。

1.3.5 如何设置binlog的模式

mysql> show global variables like '%binlog_format%';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

q  在配置文件里面修改

[mysqld]
log-bin=mysql-bin
#binlog_format="STATEMENT"
#binlog_format="ROW"
binlog_format="MIXED"

q  直接修改

SET GLOBAL binlog_format = 'STATEMENT'
SET GLOBAL binlog_format = 'ROW'
SET GLOBAL binlog_format = 'MIXED'

1.4 binlog文件解析工具mysqlbinlog

默认情况下,binlog是二进制格式的,不能使用查看文本工具的命令查看,例如:cat,vi,find等

1.4.1 解析整个log-bin文件

[[email protected] 3306]# mysqlbinlog mysql-bin.000001

1.4.2 解析指定的数据库

q  -d 只解析对应的数据库

使用-d参数,能够解析出对应log-bin文件里面的数据库,如下所示:

 [[email protected] 3306]# mysqlbinlog -d oldboy mysql-bin.000001

q  -r 数据导出到指定文件

将解析的结果存入另一个sql文件:

[[email protected] 3306]# mysqlbinlog -d oldboy mysql-bin.000001 -r oldboy.sql

mysqlbinlog工具分库导出binlog,如果使用-d参数,那更新数据时,必须有use database,才能分出指定库的binlog,例如:''

use oldboy;
insert into student values(1,'oldboy ')

下面的写法就不行:

insert into oldboy.student values(2, 'oldboy' )

1.4.3 按照位置截取

mysqlbinlog mysqlbin.000001 --start-position=365 --stop-position=456 -r pos.sql

指定开始位置,不指定结束位置:

mysqlbinlog mysqlbin.000001 --start-position=365  -r pos.sql

指定结束位置,不指定开始位置:

mysqlbinlog mysqlbin.000001 --stop-position=456 -r pos.sql

1.4.4 按照时间截取

mysqlbinlog mysql-bin000020 --start-datatime='2017-10-16 17:14:15' --stop-datetime='2017-10-16 18:14:15' -r time.sql

指定开始时间,不指定结束时间:

mysqlbinlog mysql-bin000020 --start-datatime='2017-10-16 17:14:15' -r time.sql

指定结束时间,不指定开始时间:

mysqlbinlog mysql-bin000020 --stop-datetime='2017-10-16 18:14:15' -r time.sql

1.4.5 mysqlbinlog命令小结

1、该命令作用是把binlog解析为sql语句(包含位置和时间点)

2、-d参数根据指定库拆分binlog(拆分单表binlog可以通过SQL关键字过滤)

3、通过位置参数截取部分binlog:--start-position=265 --stop-position=345,精确定位取部分内容。

4、通过时间参数截取部分binlog:--start-datetime= 180203 14:21:56 --stop-datetime= 180203 14:21:56,模糊取内容

5、-r文件名,相当于重定向”>”

6、解析ROW级别binlog日志的方法

mysqlbinlog --base64-output=decode-rows -v mysql-bin.000016

mysqlbinlog --base64-output=”decode-rows” --verbose mysql-bin.000004

第2章 错误日志error log

2.1 error log日志介绍

MySQL的错误日志(error log)记录MySQL服务进程mysqld在启动/关闭或运行过程中遇到的错误信息。

2.2 error log日志功能的开启

在配置文件中调整参数:

[[email protected] 3306]# grep log-error my.cnf
[mysqld]
log-error = /data/3306/mysql_3306.err       #<==在mysqld配置里面添加log-error功能

在启动命令里加入:

mysqld_safe --defaults-file=/data/3306/my.cnf --log-error=/data/3306/mysql_3306.err &

查看error log:

mysql> show variables like '%log_error%';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| log_error     | /data/3306/mysql_3306.err |
+---------------+---------------------------+
1 row in set (0.00 sec)

第3章 普通查询日志

3.1 general query log日志介绍

普通查询日志(general query log):记录客户端连接信息和执行的SQL语句信息;

3.2 general query log日志功能的卡其

在配置文件中调整参数:

[[email protected] 3306]# grep general_log my.cnf
[mysqld]
general_log = on
general_log_file = /data/3306/data/MySQL.log    #<==在mysqld配置里面添加general_log功能

第4章 慢查询日志

4.1 slow query log介绍

慢查询日志(slow query log):记录执行时间超出指定值(long_query_time)的SQL语句。

4.2 slow query log日志功能的开启

long_query_time = 1
log-slow-queries = /data/3306/slow.log
log_queries_not_using_indexes

慢查询日志的设置,对于数据库的SQL的优化非常重要。

4.3 切割慢查询日志

将慢查询日志按天切割,脚本如下:

[[email protected] scripts]# cat cut_slow_log.sh
#/bin/bash
cd /data/3306/ &&/bin/mv slow.log.$(date +%F) &&mysqladmin -uroot -p123456 -S /data/3306/mysql.sock flush-log

设置切割日志文件的定时任务:

[[email protected] scripts]# tail -2 /var/spool/cron/root
#cut mysql slow log
00 00 * * * /bin/sh /server/scripts/cut_slow_log.sh &>/dev/null

原文地址:http://blog.51cto.com/13178102/2082763

时间: 2024-07-29 10:14:00

MySQL数据库日志介绍的相关文章

[转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎:  ISAM:ISAM是一个定义明确且历经时间考验的数

MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

http://www.jb51.net/article/38004.htm 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎:  ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设

mysql 数据库引擎介绍

1.定义:数据库引擎是用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求. 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库.这包括创建用于存储数据的表和用于查看.管理和保护数据安全的数据库对象(如索引.视图和存储过程). 2.数据库索引介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.

mysql数据库种类介绍及 mysqldump备份数据

一  Nosql 指的是非关系型数据库,作为传统关系型数据库的一个有效补充,针对特定场景.以高性能和使用便利为目一 的功能特异化的数据库产品 Nosql特点: Noosql数据库存储不需要固定的表结构 1 他不是否定关系数据库,而是作为关系数据库的一个重要补充 2 Nosql为了高性能高并发而产生的 3 Nosql典型产品memcache(纯内存) 一重启就丢数据 redis(持久化缓存)  持久化缓存 mongodb 二  非关系型数据库种类: 1 键值存储数据库 2 列存储数据库 3 面向文

MYSQL数据库事务介绍

一.数据库事务介绍 简单地说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句, 执行时要么全成功要么全失败. 列如:小明给小红转账5块钱,流程如下: 1.从小明银行卡取出5元,计算式money-5 2.把上面5块钱打入小红的账号上,小红收到5块,money+5 上述转账的过程,对应的sql语句为: update  xiaoming_account set money=money-5 where name='xiaoming'; update  xiaohong_account

MySql数据库基本介绍和基本语法

一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为广泛.面向对象数据库则是由面向对象语言催生的新型数据库,目前的一些数据库系统,如:SQL Server 2005.Oracle10g等都开始增加面向对象的特性. 二.常用基本SQL语句/语法 Ø SQL语句基础理论 SQL是操作和检索关系型数据库的标准语言,标准SQL语句可用于操作然后关系型数据库.

MySQL各种日志介绍

目录 1.日志分类 2.各种日志介绍 1.日志分类 错误日志 查询日志 慢查询日志 事务日志 二进制日志 中继日志 2.各种日志介绍 2.1.错误日志 默认时错误日志的存放位置在数据目录中,名称为"server_name.err" 错误日志记录的事件: a).服务器启动关闭过程中的信息 b).服务器运行过程中的错误信息 c).事件调试器运行一个事件时间生的信息 d).在从服务器上启动从服务器进程时产生的信息 查看与日志相关的变量: mysql> SHOW GLOBAL VARIA

MyEclipse通过JDBC连接MySQL数据库基本介绍

转载自:http://www.jb51.net/article/31876.htm 1.前提是MyEclipse已经能正常开发Java工程 2.安装MySQL 个人使用的是版本是 mysql-5.0.22-win32.zip 网址:http://www.mysql.com/downloads/mysql/#downloads 3.下载JDBC驱动 个人使用的是 mysql-connector-java-5.1.22.zip,所需要的就是解压缩之后其中的 mysql-connector-java-

Mysql数据库日志,备份及回滚操作

一.打开二进制日志配置 : 在Windows系统下,对mysql的my.ini的log-bin等进行配置目录位置时,假设要将log-bin的日志配置到D盘的mysqllog的文件为binlog.则可以如下配置 : [mysqld] log-bin="D:\mysqllog/binlog"  注意:在这里的最后一个路径采用的是"/"而不是Windows文件系统的“\" 二.二进制日志处理: 1.查看 采用Mysqlbinlog.exe.可以在安装目录的Ser