我这里有一个程序使用的mysql数据库,由于没有源码,对业务逻辑不是很清楚,有没有工具可以跟踪程序运行过程中mysql执行了哪些sql语句?!!!

解决方案 »

  1.   

    1、
    log=\你的目录\MySQL.log
    2、
    如果是5以上,可以查找information_schema.`PROCESSLIST`系统表中的info字段内容
      

  2.   

    到你datadir 所对应的目录中看一下 hostname.log 就行。里面有所有的被执行的SQL语句。
      

  3.   

    my.ini
    [mysqld] 
    log=mysql.log
      

  4.   

    5.1后log=my.log 
    log-output=FILE
      

  5.   

    要善于利用mysql的4种日志,你这种情况可以用“通用查询日志追踪”5.11.2. 通用查询日志
    如果你想要知道mysqld内部发生了什么,你应该用--log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值, 默认名是host_name.log。所有连接和语句被记录到日志文件。当你怀疑在客户端发生了错误并想确切地知道该客户端发送给mysqld的语句时,该日志可能非常有用。
    mysqld按照它接收的顺序记录语句到查询日志。这可能与执行的顺序不同。这与更新日志和二进制日志不同,它们在查询执行后,但是任何一个锁释放之前记录日志。(查询日志还包含所有语句,而二进制日志不包含只查询数据的语句)。 服务器重新启动和日志刷新不会产生新的一般查询日志文件(尽管刷新关闭并重新打开一般查询日志文件)。
      

  6.   

    六楼说明得很详细了MySQL 5.1.29 用 general_log 系统变量来控制日志是否记录。你可以 show variables like 'general_log%'; 以得到log_file所在文件
    mysql> show variables like 'general_log%';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | general_log      | ON    |
    | general_log_file |       |
    +------------------+-------+
    2 rows in set (0.00 sec)mysql>
      

  7.   

    我的版本是5.0.67
    好像没有通用查询日志这个说法啊,我在my.cnf中加了log=/usr/local/mysql/query_log.log,没有用呢?
      

  8.   

    5.0.67 应该有啊 ,估计是你没打开。show variables like '%log%'; 看一下你的当前的设置。
    mysql> show variables like '%log%';
    +---------------------------------+------------------
    | Variable_name                   | Value
    +---------------------------------+------------------
    | back_log                        | 50
    | binlog_cache_size               | 32768
    | binlog_format                   | STATEMENT
    | expire_logs_days                | 0
    | general_log                     | ON
    | general_log_file                |
    ...
    | log                             | ON
    | log_bin                         | ON
    | log_bin_trust_function_creators | OFF
    | log_bin_trust_routine_creators  | OFF
    | log_error                       | C:\Program Files\\wuxn0058.err |
    | log_output                      | FILE
    ...
      

  9.   

    show variables like '%log%'; 看一下你的当前的设置。general_log是新的,贴你自己的就行了。否则别人根本猜不出你的机器上是如何配置的。
      

  10.   

    mysql> show variables like '%log%';
    +---------------------------------+----------------+
    | Variable_name                   | Value          |
    +---------------------------------+----------------+
    | back_log                        | 50             | 
    | binlog_cache_size               | 32768          | 
    | expire_logs_days                | 0              | 
    | innodb_flush_log_at_trx_commit  | 1              | 
    | innodb_locks_unsafe_for_binlog  | OFF            | 
    | innodb_log_arch_dir             |                | 
    | innodb_log_archive              | OFF            | 
    | innodb_log_buffer_size          | 1048576        | 
    | innodb_log_file_size            | 5242880        | 
    | innodb_log_files_in_group       | 2              | 
    | innodb_log_group_home_dir       | ./             | 
    | innodb_mirrored_log_groups      | 1              | 
    | log                             | ON             | 
    | log_bin                         | ON             | 
    | log_bin_trust_function_creators | OFF            | 
    | log_error                       |                | 
    | log_queries_not_using_indexes   | OFF            | 
    | log_slave_updates               | OFF            | 
    | log_slow_queries                | OFF            | 
    | log_warnings                    | 1              | 
    | max_binlog_cache_size           | 4294963200     | 
    | max_binlog_size                 | 1073741824     | 
    | max_relay_log_size              | 0              | 
    | relay_log                       |                | 
    | relay_log_index                 |                | 
    | relay_log_info_file             | relay-log.info | 
    | relay_log_purge                 | ON             | 
    | relay_log_space_limit           | 0              | 
    | sync_binlog                     | 0              | 
    +---------------------------------+----------------+
    29 rows in set (0.00 sec)
      

  11.   

    你的 log 变量已经是 ON 了啊,应该有日志文件了。你的datadir 目录中有些什么文件?mysql> show variables like 'datadir';
    +---------------+-----------------------------------------------+
    | Variable_name | Value                                         |
    +---------------+-----------------------------------------------+
    | datadir       | C:\Program Files\MySQL\MySQL Server 5.1\DATA\ |
    +---------------+-----------------------------------------------+
    1 row in set (0.00 sec)
    [code=BatchFile]H:\>dir "C:\Program Files\MySQL\MySQL Server 5.1\DATA\*.log"
     Volume in drive C is xxxxx
     Volume Serial Number is xxxx Directory of C:\Program Files\MySQL\MySQL Server 5.1\DATA06/15/2009  12:09p          48,121,627 .log
    06/15/2009  09:47a              11,358 mypcname-slow.log
    06/15/2009  03:05p             598,559 mypcname.log
                   3 File(s)     48,731,544 bytes
                   0 Dir(s)  31,784,209,920 bytes freeH:\>[/code]
      

  12.   

    ACMAIN_CHM ,谢谢你热心的回复,相信我这个问题你会帮我解决。
    我只想跟踪所有的sql执行过程(了解业务逻辑)
    我的data目录下文件如下:
    root@PEONY11:/usr/local/mysql/data# ls
    Applicantsemployees  miamia            mysql-bin.000004  mysql-bin.000009  mysql-bin.000014  mysql-bin.000019  mysql-bin.index  questdebug     testElaine
    ibdata1              mysql             mysql-bin.000005  mysql-bin.000010  mysql-bin.000015  mysql-bin.000020  ok               questsoftware  testJixin
    ib_logfile0          mysql-bin.000001  mysql-bin.000006  mysql-bin.000011  mysql-bin.000016  mysql-bin.000021  peony            Supervisor     testKuku
    ib_logfile1          mysql-bin.000002  mysql-bin.000007  mysql-bin.000012  mysql-bin.000017  mysql-bin.000022  PEONY11.err      test           train
    linux_contact        mysql-bin.000003  mysql-bin.000008  mysql-bin.000013  mysql-bin.000018  mysql-bin.000023  PEONY11.pid      testBret       trainchinese
      

  13.   

    执行一条sql语句,看到mysql-bin.000023、ibdata1、ib_logfile0 、ib_logfile1 这四个文件有变化,但如何查看这四个文件的内容呢?谢谢了
      

  14.   

    ibdata1  是innodb引擎表的数据文件、ib_logfile0 、ib_logfile1 是innodb的日志文件。没办法直接查看。mysql-bin.000023 是你的二进制日志文件,可以用 mysqlbinlog  来查看 mysqlbinlog  mysql-bin.000023 , 但这个日志中只包括修改数据库的DDL,DML,没有selectPEONY11.err 是你的错误日志文件。应该还有一个 PEONY11.log ,但没看到,很奇怪。