mysql三种⽇志
1. MySQL⽇志之binlog⽇志
1.1 mysql⼯具mysqlbinlog
mysqbinlog⼯具的作⽤是解析mysql的⼆进制binlog⽇志内容,把⼆进制的⽇志解析成可以在MySQL数据库⾥执⾏的SQL语句。
1.2 MySQL的·binlog⽇志是什么?
MySQL数据⽬录下的如下⽂件就是mysql的binlog⽇志
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]# greplog-bin /data/3306/myf
log-bin =/data/3306/mysql-bin
1.3 mysql binlog⽇志功能开启
[root@db01 3306]# vim /data/3306/myf
log-bin = /data/3306/mysql-bin
1.4 mysql的binlog⽇志作⽤是什么?
mysql的binlog⽇志作⽤是⽤来记录mysql内部增删等对mysql数据库有更新的内容的记录(对数据的改动),对数据库查询的语句如show,select开头的语句,不会被binlog⽇志记录。⽤于数据库的主从复制,以及增量恢复。
测试题:
在MySQL数据库中,关于binlog⽇志,下列说法正确的是-----------(A)
A:依靠⾜够长度的binlog⽇志和定期的全备,我们可以恢复任何时间点的单表数据。
B:以mysql主从同步为例,binlog中会记录主数据库的所有操作。
C:以mysql主从同步为例,binlog中会记录主数据库的所有查询操作。
D:binlog通过cat和vi⽆法查看,但可以通过gedit查看。
1.5 mysqlbinlog⼯具解析binlog⽇志实践
默认情况binlog⽇志是⼆进制格式的,不能使⽤查看⽂本⼯具的命令查看,例如:cat、vi
[root@db01 3306]# file /data/3306/mysql-bin.000001
/data/3306/mysql-bin.000001: MySQL replication log
解析指定库的binlog⽇志
范例:利⽤mysqlbinlog-d参数解析指定库的binlog⽇志
[root@db01 3306]# 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
结论:mysqlbinlog⼯具分库导出binlog,如果使⽤-d参数,那更新数据时,必须有usedatabase,才能分出指定库的binlog,例如:
use oldboy;
insert into test values(1,’oldboy’)
下⾯的写法就不⾏
nsert st values(1,’oldboy’)
官⽅资料
按照位置截取:精确
mysqlbinlog mysql-bin.000003 365 456 pos.sql
# 说明:指定⽂件的第365到456结束,是binlog⽂件中的“# at 365”---“# at 456”;-r是指定⽂件,相当于重定向,如果命令中指定开始不指定结尾就是到⽂件的结尾,如果不指定开始则是从⽂件开头开始。
按照时间截取:模糊,不准
mysqlbinlog mysql-bin.000003 -'2016-10-8 12:12:12' '2016-10-8 12:20:20' -r time.sql
# 说明:时间在该binlog⽂件中的 # at456 下⾯即使,只指定开始时间就是到⽂件结尾,只指定结尾,则是从开头开始;-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⽇志的⽅法
2. MySQL数据库服务⽇志
2.1 错误⽇志(error.log)介绍与调整
1. 错误⽇志(error.log)介绍
MySQL的错误⽇志记录MySQL服务进程mysql在启动/关闭或运⾏过程中遇到的错误信息。
2. 错误⽇志(error.log)实践
法1:在配置⽂件中调整⽅法,当然可以在启动时加⼊启动参数
[mysqld_safe]
log-error=/data/3306/
法2:启动MySQL命令⾥加⼊:
mysql_safe --detaults-file=/data/3306/myf &
在数据库⾥也可以看到
mysql> show variables like '%log_error%';
+---------------+---------------------------------+
| Variable_name | Value |
+---------------+---------------------------------+
| log_error | |
+---------------+---------------------------------+
1 row in set (0.00 sec)
如果mysql数据库起不起来排查步骤
1. 将⽇志⽂件备份,然后清空⽇志⽂件,并重启数据库,查看报错。
2. 如果是多实例的话讲多实例⽬录下的⽬录权限chown -。
3. 查看是否有管理mysql数据库的⽤户。mysql连接工具
2.2 普通查询⽇志(genera log)介绍与调整(⼯作中不⽤)
1. 普通查询⽇志(generalquery log)介绍
普通查询⽇志(general querylog),记录客户端连接信息和执⾏的SQL语句信息(增删改查,全部记录)。⼯作中不⽤,会消耗IO性能,2. 普通查询⽇志generalquery 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/myf
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的优化⾮常重要
[root@db01 /]# egrep "quer"/data/3306/myf|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
3. 使⽤⼯具mysqlsla分析慢查询,定时给相关⼈员信箱
使⽤explain优化SQL语句(select语句)的基本流程 * * * * *
原因:当⽹站出现问题,到会访问慢,在数据库中超过2秒就是很慢的查询了!
思路:当⽤户访问数据慢时,就要想到是不是满查询引起的,所以我们要查慢查询,⽽慢查询分两种情况,第⼀种是⽐较紧急情况下使⽤下⾯紧急处理的现场抓取的⽅法,进⼊mysql数据库将慢查询到,然后建⽴索引,这起见借助explain可以查看慢查询语句是否经过索引,如果没有经过索引就建⽴索引,第⼆种则是不那么紧急的情况,可以在平时就关注负载、cpu等信息,当发现有异常时时就进⾏检查,这些都是可以通过修改配置⽂件来将慢查询的语句输⼊到sllow.log⾥⾯,然后通过分析⼯具进⾏分析,以邮件的形式发给开发⼈员和dba⼈员让他们来介⼊处理。
排查⽅法:⾸先查看web负载⾼不⾼,存储压⼒⼤不⼤,还有数据库负载和磁盘IO,还有cpu等原因。负载⾼的话常规情况下是数据库慢查询导致的,下⾯是查询数据库慢查询如下:
(1)抓慢查询SQL语句⽅法
在数据库查慢查询(紧急处理)
mysql> show full processlist;
+----+------+-----------+--------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State |Info |
+----+------+-----------+--------+---------+------+-------+-----------------------+
| 9 | root | localhost | oldboy | Query | 0 | NULL | show full processlist |
+----+------+-----------+--------+---------+------+-------+-----------------------+
1 row in set (0.00sec)
说明:如果数据库正在对外提供访问,访问量⼤时。连续执⾏此命令会有很多语句,建议每隔两秒执⾏两次,当发现同⼀个命令连续出现时,就可能是慢查询语句。
在命令⾏查询慢查询(⽇常处理)
[root@db01 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "showfull processlist;"|egrep -vi "sleep"
Id User Host db Command Time State Info
11 root localhost NULL Query 0 NULL show full processlist
说明:此命令可以说是未⾬绸缪;重要不紧急,分析慢查询⽇志
配置参数记录慢查询语句
long_query_time = 2
log_queries_not_using_indexes
log-slow-queries = /data/3306/slow.log
(2)抓到慢查询后,使⽤explain语句检查索引执⾏情况(看下有没有⾛索引)
explain select * from test where name='oldgirl'\G
explain select * from test where name='oldgirl'\G
提⽰:这两条命令是查询的结果是⼀样的!SQL_NO_CACHE是防⽌有缓存
(3)对需要建索引的条件列建⽴索引
⼤表不能⾼峰期建⽴索引,300万记录就是达标
(4)分析man查询⼯具mysqlsla(每天早晨发邮件)。
切割慢查询⽇志
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论