• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 详解MySQL日志系统详细资料的示例代码分享

详解MySQL日志系统详细资料的示例代码分享

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL,日志系统等相关知识,希望本文的分享对您有所帮助
本文给大家汇总介绍了一下MySQL中的日志系统的详细资料,非常的细致,有需要的小伙伴可以参考下

做过大型系统的都知道,日志的作用不用小觑,往往到了项目中后期,对项目进行优化升级都是依据日志做出升级优化的决策的。那么学习MySQL,日志部分当然不能错过。我们面试中实际应用的所谈到的优化都是要从日志中得出来的。系统的学习mysql的日志,有助于我们准确的定位问题,提高自己的工作水平。此外,后面的一系列日志会重点从DBA的运维方面进行着手,系统的去理解MySQL各方面的配置,做到知己知彼,让MySQL成为自己得心应手的数据仓库。

一、MySQL的日志类型

默认情况下,所有的MySQL日志以文件的方式存放在数据库根目录下:

[root@roverliang data]# pwd
/usr/local/webserver/extend_lib/mysql/data
[root@roverliang data]# ls
auto.cnf ibdata1 ib_logfile0 ib_logfile1 mysql mytest performance_schema roverliang roverliang.err roverliang.pid test

MySQL的日志类型有以下几种:

1. 错误日志(error),MySQL服务实例启动、运行或者停止等相关信息。
2. 普通查询日志(general),MySQL服务实例运行的所有SQL语句或者MySQL命令。
3. 二进制日志(binary),对数据库执行的所有更新语句,不包括select 和show语句。
4. 慢查询日志(slow),执行时间超过long_query_time 设置值的SQL语句,或者没有使用索引的SQL语句。

二、MySQL日志缓存

一个高速、稳定、可靠的系统,缓存在其中必定起着至关重要的作用。MySQL日志处理也使用了缓存机制。MySQL日志最初存放在MySQL服务器的内存中,若超过指定的存储容量,内存中的日志则写(或者刷新flush)到外存中,以数据库表或者以文件的方式永远的保存在硬盘中。

三、MySQL错误日志(error log)

MySQL的错误日志主要记录MySQL服务实例每次启动、停止的详细信息,以及MySQL实例运行过程中产生的警告或者错误信息。和其他的日志不同,MySQL的error日志必须开启,无法关闭。

默认情况下,错误日志的文件名为: 主机名.err。 但error 日志并不会记录所有的错误信息,只有MySQL服务实例运行过程中发声的关键错误(critical)才会被记录下来。

mysql> show variables like 'log_error'\G
*************************** 1. row ***************************
Variable_name: log_error
Value: /usr/local/webserver/extend_lib/mysql/data/roverliang.err
1 row in set (0.02 sec)

四、MySQL普通查询日志(general log)

MySQL普通查询日志记录MySQL服务实例所有的操作,如select、update、insert、delete等操作,无论该操作是否成功执行。还有MySQL客户机与MySQL服务端连接及断开的相关信息,无论连接成功还是失败。与MySQL普通查询日志有关的参数有三个。

[]()general_log

mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log  | OFF  |
+---------------+-------+
1 row in set (0.01 sec)

可以通过 set @@global.general_log = 1 的方式来开启普通查询日志。

mysql> set @@global.general_log =1;
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log  | ON  |
+---------------+-------+

但是通过这种方式修改MySQL的变量只会在当前的MySQL实例运行期间生效,一旦MySQL重启,则会重新恢复到默认的状态。永久生效的方式是修改mysql 的my.cnf 文件。在配置文件后添加:

general_log = 1 
general_log_file

普通查询日志一旦开启,MySQL服务实例将自动创建普通查询日志文件,general_log_file参数设置了普通查询日志文件的物理位置。如下:

mysql> show variables like 'general_log_file';
+------------------+-----------------------------------------------------------+
| Variable_name  | Value                           |
+------------------+-----------------------------------------------------------+
| general_log_file | /usr/local/webserver/extend_lib/mysql/data/roverliang.log |
+------------------+-----------------------------------------------------------+

注意:由于普通查询日志几乎记录了MySQL的所有操作,对于数据访问频繁的数据库服务器而言,如果开启MySQL的普通查询日志将会大幅度的降低数据库的性能,因此建议关闭普通查询日志。只有在特殊时期,如需要追踪某些特殊的查询日志,可以临时打开普通的查询日志。

log_output

log_output参数设置了普通查询日志以及慢查询日志的内容存储到数据库表中。 可以使用 set @@global.log_output='table' 将普通查询日志及慢查询日志存入mysql系统数据库中的general 表 以及slow_log 表中。值得注意的是这两个表的存储引擎为CSV,此后查看新的普通查询日志内容时便可以使用SQL语句;

set @@global.log_output = 'table';
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output  | TABLE |
+---------------+-------+

五、MySQL慢查询日志(slow log)

慢查询日志的相关问题,面试的时候面试官非常青睐聊这方面的问题。以前只能够高谈阔论MySQL主从架构,以及从各个方面优化MySQL,但是平时并没有真正的去了解过慢查询如何去开启以及相关的配置。

使用MySQL慢查询日志可以有效的跟踪 执行时间过长 或者 没有使用索引的查询语句。这种包括select 语句,update语句,delete语句,以及insert语句,为优化查询提供帮助。与普通查询日志不同的另一个区别在于,慢查询日志只包含成功执行过的查询语句。与MySQL慢查询日志有关的参数有5个。

1、slow_query_log

slow_query_log 设置慢查询日志是否开启。

mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF  |
+----------------+-------+

2、slow_query_log_file

慢查询日志一旦开启,MySQL实例将自动创建慢查询日志文件。slowquerylog_file 所指定的文件,存放慢查询日志内容。 修改方法和上文所示的一致。直接到my.cnf 文件中进行编辑。

3、long_query_time

long_query_time 设置了慢查询的时间阈值。默认阈值是10s。

4、log_quries_not_using_indexes

log_quries_not_using_indexes 是否将不使用索引的查询语句记录到慢查询日志中,无论查询速度有多快。

mysql> set @@global.log_queries_not_using_indexes=1;

mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name         | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON  |
+-------------------------------+-------+

5、log_output

设置了普通查询日志以及慢查询日志的输出形式,值有两个file、table;

六、MySQL慢查询日志查看

log_output参数可以设置慢查询日志的输出形式。默认为FILE,可以设置为TABLE;

mysql> desc mysql.slow_log;
+----------------+---------------------+
| Field     | Type        |
+----------------+---------------------+
| start_time   | timestamp      |
| user_host   | mediumtext     |
| query_time   | time        |
| lock_time   | time        |
| rows_sent   | int(11)       |
| rows_examined | int(11)       |
| db       | varchar(512)    |
| last_insert_id | int(11)       |
| insert_id   | int(11)       |
| server_id   | int(10) unsigned  |
| sql_text    | mediumtext     |
| thread_id   | bigint(21) unsigned |
+----------------+---------------------+

其中: lock_time表示该SQL执行时被锁阻塞的时间。 rows_send表示执行SQL后返回的内容行数。 rows_examined表示该SQL执行时实际扫描的记录条数。

但是使用TABLE来存储慢查询日志并不常见,业务量较大的情况下,对于系统的主服务会有影响。我们可以使用FILE 的方式来进行日志存储。安装MySQL的时候在MySQL的bin目录下已经默认安装了mysqldumpslow.pl工具来进行慢查询的日志分析。 window下使用这个工具,可能需要折腾些配置,这不在本文的介绍范围内,学系统服务,还是移步linux吧。 linux下的命令以及工具都可以使用 命令本身 + --help 的选项来查看帮助文档。

-s 表示按照何种方式排序

子选项: c、t、l、r

c : SQL执行的次数
t : 执行时间
l : 锁等待时间
r : 返回数据条数
at、al、ar 是对应 t l r 的平均值。 -t :表示返回前 N 条记录。

-g: grep 缩写。包含模糊匹配

常用法如下:




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05mysql 海量数据的存储和访问解决方案
  • 2018-12-05两种不停止 MySQL 服务增加从库的方式
  • 2017-05-11浅谈MySql的存储引擎(表类型)
  • 2018-12-05MSSQL优化之探索MSSQL执行计划(转)
  • 2018-12-05Oracle 数据库管理脚本命名规范
  • 2018-12-05mysql 维护常用命令
  • 2018-12-05MySQL data的存储目录变更
  • 2018-12-05sqlserver只有MDF文件恢复数据库的方法
  • 2018-12-05有关一致性校验的课程推荐10篇
  • 2018-12-05mysqldump中关于定时备份数据的详细介绍(图文)

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 使用mysqlfrm恢复frm表结构的方法
    • 两种不停止 MySQL 服务增加从库的方式
    • MySQL关于使用变量实现各种排序的示例代码分析
    • 用批处理实现自动备份和清理mysql数据库的代码
    • sqlserver 数据类型转换小实验
    • 在大数据情况下MySQL的一种简单分页优化方法
    • 详解MySQL数据库设置主从同步的方法
    • Oracle 11g2的监听器配置教程
    • mysql主从同步配置的方法
    • MySQL如何查看连接数和连接状态

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有