zoukankan      html  css  js  c++  java
  • 如何在MySql中记录SQL日志

    SQL server有一个sql profiler可以实时跟踪服务器执行的SQL语句,这在很多时候调试错误非常有用。例如:别人写的复杂代码、生产系统、无调试环境、无原代码... ...

     
    查了一下资料,My SQL可以用下面方法跟踪sql 语句,以下方法以Windows平台为例,linux雷同:
     
    1  配置my.ini文件(在安装目录,linux下文件名为my.cnf
     
      查找到[mysqld]区段,增加日志的配置,如下示例:
    [mysqld]
    log="C:/temp/mysql.log"
    log_slow_queries="C:/temp/mysql_slow.log"
    long_query_time=1
     
    log指示日志文件存放目录;
    log_slow_queries指示记录执行时间长的sql日志目录;
    long_query_time指示多长时间算是执行时间长,单位s。
     
    Linux下这些配置项应该已经存在,只是被注释掉了,可以去掉注释。但直接添加配置项也OK啦。
     
    2  重新启动mysql服务。
     
    注意事项:
        A 日志存放目录必须提前存在,否则不能记录日志。这里也局势C:/temp目录必须已经存在
        B 日志文件是linux格式的文本,建议用ultraEdit打开,转换为dos格式查看(否则没有换行,看不懂的)
        C 服务在启动状态下不能删除日志文件,否则就无法记录sql语句了。
        D 不能用ultraEdit直接清除文件内容后保存,否则也记录不下来了。需要重启服务,如果ultraEdit保存了.bak,后记录到此文件中。
        E 可以用notepad清除文本后保存,可以继续记录日志。(怪怪的,也不建议用)

    if ($ != jQuery) { $ = jQuery.noConflict();}

    实际一点:

    先以window为环境:

    window下的日志
    日志文件类型概述:  
    1.
    错误日志   记录启动、运行或停止mysqld时出现的问题。
    My.ini配置信息:
    #Enter a name for the error log file.   Otherwise a default name will be used.
    #log-error=d:/mysql_log_err.txt
    2.
    查询日志    记录建立的客户端连接和执行的语句。
    My.ini配置信息:
    #Enter a name for the query log file. Otherwise a default name will be used.
    #log=d:/mysql_log.txt
    3.
    更新日志   记录更改数据的语句。不赞成使用该日志。
    My.ini配置信息:
    #Enter a name for the update log file. Otherwise a default name will be used.
    #log-update=d:/mysql_log_update.txt
    4.
    二进制日志    记录所有更改数据的语句。还用于复制。
    My.ini配置信息:
    #Enter a name for the binary log. Otherwise a default name will be used.
    #log-bin=d:/mysql_log_bin
    5.
    慢日志    记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。
    My.ini配置信息:
    #Enter a name for the slow query log file. Otherwise a default name will be used.
    #long_query_time =1
    #log-slow-queries= d:/mysql_log_slow.txt



    Linux下的配置

    代码
    在linux下:
    Sql代码

       1. # 在[mysqld] 中輸入
       2. #log
       3. log-error=/usr/local/mysql/log/error.log
       4. log=/usr/local/mysql/log/mysql.log
       5. long_query_time=2
       6. log-slow-queries= /usr/local/mysql/log/slowquery.log

    # 在[mysqld] 中輸入 #log log-error=/usr/local/mysql/log/error.log log=/usr/local/mysql/log/mysql.log long_query_time=2 log-slow-queries= /usr/local/mysql/log/slowquery.log



    windows下:
    Sql代码

       1. # 在[mysqld] 中輸入
       2. #log
       3. log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log"
       4. log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/mysql.log"
       5. long_query_time=2
       6. log-slow-queries= "E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"

    # 在[mysqld] 中輸入 #log log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log" log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/mysql.log" long_query_time=2 log-slow-queries= "E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"



    开启慢查询
    long_query_time =2 --是指执行超过多久的sql会被log下来,这里是2秒
    log-slow-queries= /usr/local/mysql/log/slowquery.log --将查询返回较慢的语句进行记录

    log-queries-not-using-indexes = nouseindex.log --就是字面意思,log下来没有使用索引的query

    log=mylog.log --对所有执行语句进行记录



    日志的存放:默认情况下,当开启时,所有的日志都存放在DataDir目录下. 如果没有指定名称的话,它会以后主机名为名称. 如主机名为songcomputer,则相关就的日志为songcomputer.log文件.


    Mysql日志的关闭与开启:
    使用以下命令查看是否启用了日志
    mysql>show variables like 'log_%’;


    凡Value值为OFF的表示未开启服务,若要开启只需要将上的my.ini配置信息写入(my.ini为mysql安装目录下),然后去掉前面的“#”
    号,再重启mysql服务。OK,现在会看到指定的日志文件已创建。相反地,若要停止mysql日志服务,只需要将my.ini中对应的配置信息去掉即
    可。


    >>>>相应的使用慢日志查询

    手动的去读取慢日志以及修改慢日志的时间

    show variables like 'long%'
    会得到慢日志的时间

    进行设置慢日志的值
    set long_query_time =2;




    侧重的二进制文件

    二进制日志:
      
    从概述中我可以看到my.ini配置信息的log-bin没有指定文件扩展名,这是因为即使你指定上扩展名它也不使用。当mysql创建二进制日志文件
    时,首先创建一个以“mysql_log_bin”为名称,以“.index”为后缀的文件;再创建一个以“mysql_log_bin”为名称,以
    “.000001”为后缀的文件。当mysql服务重新启动一次以“.000001”为后缀的文件会增加一个,并且后缀名加1递增;如果日志长度超过了
    max_binlog_size的上限(默认是1G)也会创建一个新的日志文件;使用flush
    logs(mysql命令符)或者执行mysqladmin –u –p flush-logs(windows命令提示符)也会创建一个新的日志文件。
    既然写入的都是二进制数据,用记事本打开文件是看不到正常数据的,那怎么查看呢?
    使用BIN目录下mysqlbinlog命令,如:
    Bin>mysqlbinlog d:/mysql_log/mysql_bin.000001
    Bin>mysqlbinlog d:/mysql_log/mysql_bin.000002
    Bin>mysqlbinlog d:/mysql_log/mysql_bin.000003
    Bin>mysqlbinlog d:/mysql_log/mysql_bin.000004
    Bin>mysqlbinlog d:/mysql_log/mysql_bin.000005
    使用SQL语句也可查看mysql创建的二进制的文件目录:

    Mysql> show master logs;

    查看当前二进制文件状态:

    mysql> show master status; 

    至于准确的看懂日志文件,还需要读者仔细阅读,深深体会,这里就不再奥述了! 
  • 相关阅读:
    SQL Server Profiler使用方法
    RichTextBox控件-主要用于输入输出编辑文本信息
    ComboBox
    另一个 SqlParameterCollection 中已包含 SqlParameter
    GUID全局唯一标识符
    MDI-多文档窗体
    【转】classpath和环境变量设置
    接口、抽象类都要单建(好习惯)
    Java基础部分回顾(为自己)
    Java基础——ArrayList与LinkedList(二)
  • 原文地址:https://www.cnblogs.com/wayne173/p/3747299.html
Copyright © 2011-2022 走看看