No.03_MySQL数据库三种日志介绍5 min read

  • A+
所属分类:MySQL

 1. MySQL日志之binlog日志

    1.1 mysql工具 mysqlbinlog

    1.2 MySQL的·binlog日志是什么?

    1.3 mysql binlog日志功能开启

    1.4 mysql的binlog日志作用是什么?

    1.5 mysqlbinlog工具解析binlog日志实践.

    1.6 mysqlbinlog命令小结

 2. MySQL数据库服务日志

    2.1 错误日志(error.log)介绍与调整

    2.2 普通查询日志(genera log)介绍与调整(工作中不用)

    2.3 慢查询日志(slow query log)介绍与调整 *****

    2.4 二进制日志(binary log)介绍与调整

        

  三种日志为:

     1. 二进制日志文件(binlog)

     2. 慢查询日志(slow.log)                #<== 归类服务日志

     3. 普通查询日志(db01.log)            #<== 归类服务日志

     

1. MySQL日志之binlog日志

  

1.1 mysql工具mysqlbinlog

   

     mysqbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制的日志解析成可以在MySQL数据库里执行的SQL语句。
  

1.2 MySQL·binlog日志是什么?

 

MySQL数据目录下的如下文件就是mysqlbinlog日志

mysql-bin.000001 
mysql-bin.000002 
mysql-bin.000003 
mysql-bin.000004 
mysql-bin.000005 
mysql-bin.000006 
mysql-bin.000007 
mysql-bin.000008 
...... 
 ...... 
 ...... 

提示:要想生成binlog必须在配置文件中打开log-bin功能,如下:

[root@db01 3306]# grep log-bin /data/3306/my.cnf 
log-bin = /data/3306/mysql-bin

  


1.3 mysql binlog日志功能开启

   

[root@db01 3306]# vim /data/3306/my.cnf
log-bin = /data/3306/mysql-bin         #<== 在mysql数据库配置文件中将此行注释打开即可

   

1.4 mysqlbinlog日志作用是什么?

   

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

  

选择题:

MySQL数据库中,关于binlog日志,下列说法正确的是-----------A

  A:依靠足够长度的binlog日志和定期的全备,我们可以恢复任何时间点的单表数据。

  B:以mysql主从同步为例,binlog中会记录主数据库的所有操作。

  C:以mysql主从同步为例,binlog中会记录主数据库的所有查询操作。

  Dbinlog通过catvi无法查看,但可以通过gedit查看。

  

1.5 mysqlbinlog工具解析binlog日志实践

   

默认情况binlog日志是二进制格式的,不能使用查看文本工具的命令查看,例如:catvi

[root@db01 3306]# file /data/3306/mysql-bin.000001
/data/3306/mysql-bin.000001: MySQL replication log             #<== 文件类型

   

解析指定库的binlog日志

范例:利用mysqlbinlog -d参数解析指定库的binlog日志

[root@db01 3306]# mysqlbinlog -d oldboy /data/3306/mysql-bin.000001 -r oldboy.sql
[root@db01 3306]# ll oldboy.sql            #<== 查看导出的文件
-rw-r--r-- 1 root root 4731 Aug 31 04:36 oldboy.sql
[root@db01 3306]# cat oldboy.sql           #<== 现在就可以查看啦
说明:-d是指定库进行解析;-r:指定解析到那个文件,相当于重定向

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

use oldboy;
insert into test values(1,’oldboy’)

  

下面的写法就不行

nsert into oldboy.test values(1,’oldboy’)

  

按照位置截取:精确

mysqlbinlog mysql-bin.000003 --start-position=365 --stop-position=456 -r pos.sql

#说明:指定文件的第365456结束,是binlog文件中的# at 365”---“# at 456”-r是指定文件,相当于重定向,如果命令中指定开始不指定结尾就是到文件的结尾,如果不指定开始则是从文件开头开始。

  

按照时间截取:模糊,不准

mysqlbinlog mysql-bin.000003 --stsrt-datetime='2016-10-8 12:12:12' --stop-deter=time='2016-10-8 12:20:20' -r time.sql  #<== 注意格式

# 说明:时间在该binlog文件中的 # at 456 下面即使,只指定开始时间就是到文件结尾,只指定结尾,则是从开头开始;-r是指定文件

   

1.6 mysqlbinlog命令小结

  

mysqlbinlog命令:

    1. binlog日志解析为SQL语句(包含位置和时间点)。

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

    3. 通过位置参数截取部分binlog--syart-position=365  --stop-position=456,;精确定位取部分内容。

    4. 通过时间参数截取部分binlog-stsrt-datetime='2016-10-8 12:12:12' --stop-deter=time='2016-10-8 12:20:20',模糊截取部分内容,会丢数据。

    5. -r指定文件名,相当于重定向。

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

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

     

2. MySQL数据库服务日志

   

2.1 错误日志(error.log)介绍与调整


1. 错误日志(error.log)介绍

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


2. 错误日志(error.log)实践

    1:在配置文件中调整方法,当然可以在启动时加入启动参数

[mysqld_safe]                   #<== 放在该模块下
log-error=/data/3306/mysql_oldboy3306.err

    法2:启动MySQL命令里加入:

mysql_safe --detaults-file=/data/3306/my.cnf --log-error=/data/3306/mysql_oldboy3306.err &

   

在数据库里也可以看到:

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

     

如果mysql数据库起不起来排查步骤:

  1. 把/data/3306/data目录删除后重新建立data目录并加属主属组

  2. 把原有的my.cnf mysql这两个文件也重新还原过

  3. 重新用mysqld_safe启动过

  4. 改过my.cnf里面的server-id =2 

  5. 配置文件里面的端口路径

  6. 将日志文件备份,然后清空日志文件,并重启数据库,查看报错。

  7. 如果是多实例的话讲多实例目录下的目录权限chown -R mysql.....。

  8. 查看是否有管理mysql数据库的用户。

   

2.2 普通查询日志(genera log)介绍与调整(工作中不用)

   

1. 普通查询日志(general query log)介绍

    普通查询日志(general query log),记录客户端连接信息和执行的SQL语句信息(增删改查,全部记录)。工作中不用,会消耗IO性能,


2. 普通查询日志general
query log
)调整 

mysql> show variables like 'general_log%';      #<== 在数据库中查看
+------------------+---------------------------+
| Variable_name    | Value                     |
+------------------+---------------------------+
| general_log      | ON                        |    #<== 当前是关闭状态
| general_log_file | /data/3306/data/db01.log  |
+------------------+---------------------------+
2 rows in set (0.00 sec)

  

临时生效:

mysql> set global general_log_file = '/data/3306/data/db01.log';       #<== 数据库中配置         
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'general_log%';		#<== 配置完后查看
+-------------------+---------------------------+
| Variable_name     	| Value                   	|
+-------------------+---------------------------+
| general_log       | OFF             		    |
| general_log_file  | /data/3306/data/db01.log 	|
+-------------------+---------------------------+
2 rows in set (0.00 sec)

  

永久生效(配置文件中配置):

[root@db01 3306]# grep gene /data/3306/my.cnf
general_log = on  			   	#<== 普通日志开关
general_log_file = /data/3306/data/db01.log  	#<== 日志位置

    

2.3 慢查询日志(slow query log)介绍与调整*****

   

1. 慢查询日志介绍:

    慢查询日志,记录执行时间超出指定值的SQL语句

 

2. 慢查询日志的调整配置

long_query_time = 1 			#<== 属于慢查询的时间
log-slow-queries = /data/3306/slow.log	#<== 慢查询的日志文件
log_queries_not_using_indexes		#<== 记录没有使用索引的SQL语句

     

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

[root@db01 /]# egrep "quer" /data/3306/my.cnf|tail -3 
long_query_time = 1
log-slow-queries = /data/3306/slow.log
log_queries_not_using_indexes 

   

利用慢查询进行优化解决方案:

   

1. 开启慢查询参数

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

  

2. 慢查询日志切割

[root@db01 /]# vim /server/scripts/cut_slow_log.sh 
#!/bin/bash
cd /data/3306 &&\
/bin/mv slow.log slow.log.$(date +%F) &&\
mysqladmin -uroot -poldboy123 -S /data/3306/mysql.sock flush-log
[root@db01 scripts]# tail -2 /var/spool/cron/root
# cut mysql slow log
00 00 * * * /bin/sh /server/scripts/cut_slow_log.sh >/dev/null 2>&1


使用explain优化SQL语句(select语句)的基本流程:

1. 抓慢查询SQL语句方法

  a:如下

#登录数据库现场抓,连续执行2次,超过2秒)
show full processlist;
#在命令行进行抓取
mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show full processlist;"|egrep -vi "sleep"

   

  b. 分析慢查询日志,配置参数记录慢查询语句

long_query_time = 2 			#<== 属于慢查询的时间
log-slow-queries = /data/3306/slow.log	#<== 慢查询的日志文件
log_queries_not_using_indexes		#<== 记录没有使用索引的SQL语句

   

2. explain语句检查索引执行情况

explain select * from test where name='wordpress'\G 
explain select SQL_NO_CACHE * from test where name='wordpress'\G

    

3. 对需要建索引的条件列建立索引,大表不能高峰期建立索引,300万记录

  

4. 分析查询工具mysqlsla(每天早晨发邮件)

    切割慢查询日志,去重分析后发给大家。

    1)mv,relaod 进程

    2)cp,>清空

mv /data/3306/slow.log /opt/$(date +%F)_slow.log
mysqladmin -uroot -p123456 -S /data/3306/mysql.sock flush-logs 

mysqlsla分析慢查询日志工具参考:http://blog.itpub.net/7607759/viewspace-692828 

     

2.4 二进制日志(binary log)介绍与调整

  

1. 二进制日志介绍

    二进制日志(binary log),记录数据备份修改的相关信息,用于主从复制和增量恢复


2. 二进制日志(binary
log
)调整。

mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_trust_function_creators | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
3 rows in set (0.00 sec)
g[root@zyl ~]# grep log-bin /etc/my.cnf
log-bin=mysql-bin

    

二进制日志log-bin作用:

   1. 以二进制形式记录更改数据库的SQL语句

   2. 用于主从复制

   3. 增量数据备份及恢复

 

临时不记录binlog(增量恢复)一般不这样做,要是有主从时更不能不记录binlog日志

mysql> set session sql_log_bin = OFF;    #<== 临时不记录binlog
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "%log_bin%";  #<== 设置后查看
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_trust_function_creators | OFF   |
| sql_log_bin                     | OFF   |
+---------------------------------+-------+
3 rows in set (0.00 sec)

     


 

zhaoyulin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: