搜索
首页
笔记
案例
关于
课程列表
MySQL
数据库操作
数据表操作
Mysql列类型及列属性
MySQL常用函数
MySQL增删改
MySQL查询
JOSN的支持
MySQL流程控制语句
视图
存储过程及存储函数
变量与游标
事务
触发器
权限及安全管理
MySQL日志
二进制日志
Mysql5.7复制功能
数据备份与恢复
性能优化
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
权限及安全管理
二进制日志
MySQL日志
不管是哪个数据库产品,一定会有日志文件。在MariaDB/MySQL中,主要有5种日志文件: 1.错误日志(error log):记录mysql服务的启停时正确和错误的信息,还记录启动、停止、运行过程中的错误信息。 2.查询日志(general log):记录建立的客户端连接和执行的语句。 3.二进制日志(bin log):记录所有更改数据的语句,可用于数据复制。 4.慢查询日志(slow log):记录所有执行时间超过long_query_time的所有查询或不使用索引的查询。 5.中继日志(relay log):主从复制时使用的日志。 ## 日志刷新操作 以下操作会刷新日志文件,刷新日志文件时会关闭旧的日志文件并重新打开日志文件。对于有些日志类型,如二进制日志,刷新日志会滚动日志文件,而不仅仅是关闭并重新打开。 ``` mysql> FLUSH LOGS; shell> mysqladmin flush-logs shell> mysqladmin refresh ``` ## 错误日志 错误日志是最重要的日志之一,它记录了MariaDB/MySQL服务启动和停止正确和错误的信息,还记录了mysqld实例运行过程中发生的错误事件信息。 可以使用" --log-error=[file_name] "来指定mysqld记录的错误日志文件,如果没有指定file_name,则默认的错误日志文件为datadir目录下的 `hostname`.err ,hostname表示当前的主机名。 也可以在MariaDB/MySQL配置文件中的mysqld配置部分,使用log-error指定错误日志的路径。 ``` 如果不知道错误日志的位置,可以查看变量log_error来查看。 mysql> show variables like 'log_error'; +---------------+----------------------------------------+ | Variable_name | Value | +---------------+----------------------------------------+ | log_error | /var/lib/mysql/node1.longshuai.com.err | +---------------+----------------------------------------+ ``` 在MySQL 5.5.7之前,刷新日志操作(如flush logs)会备份旧的错误日志(以_old结尾),并创建一个新的错误日志文件并打开,在MySQL 5.5.7之后,执行刷新日志的操作时,错误日志会关闭并重新打开,如果错误日志不存在,则会先创建。 在MariaDB/MySQL正在运行状态下删除错误日志后,不会自动创建错误日志,只有在刷新日志的时候才会创建一个新的错误日志文件。 ## 慢查询日志 查询超出变量 long_query_time 指定时间值的为慢查询。但是查询获取锁(包括锁等待)的时间不计入查询时间内。 mysql记录慢查询日志是在查询执行完毕且已经完全释放锁之后才记录的,因此慢查询日志记录的顺序和执行的SQL查询语句顺序可能会不一致(例如语句1先执行,查询速度慢,语句2后执行,但查询速度快,则语句2先记录)。 注意,MySQL 5.1之后就支持微秒级的慢查询超时时长,对于DBA来说,一个查询运行0.5秒和运行0.05秒是非常不同的,前者可能索引使用错误或者走了表扫描,后者可能索引使用正确。 另外,指定的慢查询超时时长表示的是超出这个时间的才算是慢查询,等于这个时间的不会记录。 和慢查询有关的变量: ``` # 是否启用慢查询日志,此变量和log_slow_queries修改一个另一个同时变化 slow_query_log={1|ON|0|OFF} # 指定慢查询超时时长(默认10秒),超出此时长的属于慢查询 long_query_time=10 # 定义一般查询日志和慢查询日志的输出格式,默认为file log_output={TABLE|FILE|NONE} #默认路径为库文件目录下主机名加上-slow.log slow_query_log_file=/mydata/data/hostname-slow.log # 查询没有使用索引的时候是否也记入慢查询日志 log_queries_not_using_indexes=OFF ``` 现在启用慢查询日志。 mysql> set @@global.slow_query_log=on; 因为默认超时时长为10秒,所以进行一个10秒的查询。 mysql> select sleep(10); 查看慢查询日志文件。这里看到虽然sleep了10秒,但是最后查询时间超出了847微秒,因此这里也记录了该查询。 ``` [root@xuexi data]# cat xuexi-slow.log /usr/local/mysql/bin/mysqld, Version: 5.6.35-log (MySQL Community Server (GPL)). started with: Tcp port: 3306 Unix socket: /mydata/data/mysql.sock Time Id Command Argument # Time: 170329 9:55:58 # User@Host: root[root] @ localhost [] Id: 1 # Query_time: 10.000847 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 use test; SET timestamp=1490752558; select sleep(10); ``` Query_time: 10.000847 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 表示总查询时间为10.000847秒 锁定时间0 发送的行:1行 扫描的行:0行 随着时间的推移,慢查询日志文件中的记录可能会变得非常多,这对于分析查询来说是非常困难的。好在提供了一个专门归类慢查询日志的工具mysqldumpslow。 ### mysqldumpslow工具使用 
权限及安全管理
二进制日志
文章目录