首页 文章

如何启用MySQL查询日志?

提问于
浏览
218

如何启用MySQL函数来记录从客户端收到的每个SQL查询语句以及查询语句提交的时间?我可以在phpmyadmin或NaviCat中执行此操作吗?我如何分析日志?

13 回答

  • 0

    这已经在评论中,但值得回答:没有编辑配置文件:在mysql中,以root身份执行

    SET global general_log_file='/tmp/mysql.log'; 
    SET global log_output = 'file';
    SET global general_log = on;
    

    不要忘记事后关掉它 .

  • 2

    不完全是问题的答案,因为这个问题已经有了很好的答案 . 这是一个侧面信息 . 启用general_log确实会削弱MySQL的性能 . 我在 生产环境 服务器上意外地离开了 general_log =1 ,并花了几个小时找出性能与其他服务器上的类似设置无法比较的原因 . 然后我发现这解释了启用常规日志的影响 . http://www.fromdual.com/general_query_log_vs_mysql_performance .

    故事的要点,不要将 general_log=1 放在 .cnf 文件中 . 而是使用 set global general_log =1 一段短暂的持续时间,只需记录下来,找出你想要找到的东西,然后将其关闭 .

  • 1

    我不得不放弃并重新创建一般日志 . 在娱乐过程中,字符集搞砸了,我最终在日志中出现了这个错误:

    [ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'

    因此,如果“检查以确保日志记录已启用”的标准答案对您不起作用,请检查以确保您的字段具有正确的字符集 .

  • 261

    MySQL 5.6版本中存在错误 . 甚至mysqld显示为:

    Default options are read from the following files in the given order:
    C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
    

    Realy设置按以下顺序读取:

    Default options are read from the following files in the given order:
    C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
    

    检查文件:“C:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini”

    希望它对某人有所帮助 .

  • 49

    当我想快速优化不同的页面加载时,我使用此方法进行日志记录 . 这是一个小小的提示......

    Logging to a TABLE

    SET global general_log = 1;
    SET global log_output = 'table';
    

    然后,您可以从我的 mysql.general_log 表中进行选择以检索最近的查询 .

    然后我可以在mysql.log上做类似于 tail -f 的事情,但有更多的改进......

    select * from mysql.general_log 
    where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
    and argument <> "SELECT 1" and argument <> "" 
    and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"  
    and command_type = "Query"  and argument <> "SET PROFILING=1"
    

    这样可以很容易地查看我可以尝试并减少的查询 . 我使用8秒间隔来仅获取在最后8秒内执行的查询 .

  • 1

    看看另一个相关问题的答案 . 它显示了如何在不重新启动的情况下启用,禁用和查看实时服务器上的日志 .

    Log all queries in mysql


    以下是摘要:

    如果您不想或无法重新启动MySQL服务器,可以在运行的服务器上继续这样操作:

    • 创建日志表(参见answer

    • 启用数据库的查询日志记录(请注意,字符串'table'应按字面意思放置,不能用任何表名替换 . 谢谢Nicholas Pickering

    SET global general_log = 1;
    SET global log_output = 'table';
    
    • 查看日志
    select * from mysql.general_log;
    
    • 禁用数据库的查询日志记录
    SET global general_log = 0;
    
  • 0

    我还想启用MySQL日志文件来查看查询,我已通过以下说明解决了这个问题

    • 转到 /etc/mysql/mysql.conf.d

    • 打开mysqld.cnf

    并启用以下行

    general_log_file        = /var/log/mysql/mysql.log
    general_log             = 1
    
    • 使用此命令重新启动MySQL /etc/init.d/mysql restart

    • 转到 /var/log/mysql/ 并检查日志

  • 1

    在Windows上,您可以直接访问

    C:\wamp\bin\mysql\mysql5.1.53\my.ini
    

    my.ini 中插入此行

    general_log_file = c:/wamp/logs/mysql_query_log.log
    

    my.ini 文件最终看起来像这样

    ...
    ...
    ...    
    socket      = /tmp/mysql.sock
    skip-locking
    key_buffer = 16M
    max_allowed_packet = 1M
    table_cache = 64
    sort_buffer_size = 512K
    net_buffer_length = 8K
    read_buffer_size = 256K
    read_rnd_buffer_size = 512K
    myisam_sort_buffer_size = 8M
    basedir=c:/wamp/bin/mysql/mysql5.1.53
    log = c:/wamp/logs/mysql_query_log.log        #dump query logs in this file
    log-error=c:/wamp/logs/mysql.log
    datadir=c:/wamp/bin/mysql/mysql5.1.53/data
    ...
    ...
    ...
    ...
    
  • 13

    for mysql>=5.5 仅适用于慢速查询(1秒及以上)my.cfg

    [mysqld]
    slow-query-log = 1
    slow-query-log-file = /var/log/mysql/mysql-slow.log
    long_query_time = 1
    log-queries-not-using-indexes
    
  • 153

    您可以使用禁用或启用常规查询日志(记录所有查询)

    SET GLOBAL general_log = 1 # (or 0 to disable)
    
  • 4

    首先, Remember that this logfile can grow very large on a busy server.

    For mysql < 5.1.29:

    要启用查询日志,请将其放在 /etc/my.cnf[mysqld] 部分

    log   = /path/to/query.log  #works for mysql < 5.1.29
    

    另外,从MySQL控制台启用它

    SET general_log = 1;
    

    http://dev.mysql.com/doc/refman/5.1/en/query-log.html

    For mysql 5.1.29+

    对于mysql 5.1.29,不推荐使用 log 选项 . 要指定日志文件并启用日志记录,请在 [mysqld] 部分的my.cnf中使用:

    general_log_file = /path/to/query.log
    general_log      = 1
    

    或者,要从MySQL控制台打开日志记录(还必须以某种方式指定日志文件位置,或找到默认位置):

    SET global general_log = 1;
    

    另请注意,还有其他选项可以仅记录慢速查询或不使用索引的查询 .

  • 3

    要在MAC机器中启用查询日志:

    打开以下文件:

    vi /private/etc/my.cnf
    

    在“mysqld”部分下设置查询日志URL,如下所示:

    [mysqld]
    
    general_log_file=/Users/kumanan/Documents/mysql_query.log
    

    很少有机器没有正确记录查询,所以你可以从MySQL控制台启用它

    mysql> SET global general_log = 1;
    
  • 36

    在phpMyAdmin 4.0中,您将转到状态>监视器 . 在那里,您可以启用慢查询日志和常规日志,查看实时监视器,选择图形的一部分,查看相关查询并分析它们 .

相关问题