2011-08-18 71 views

回答

1

打开MySQL中的查询日志并监视mysql查询日志文件。

在你的mysqld部分的my.cnf或my.ini文件中添加指令:

log = /path/to/my/log/file 
0

有很多种方法,看“原始”的查询,端口扫描使用tcpdump的,MySQL的代理,或看“中mysqladmin -Ppasswd‘PROCESSLIST’”虽然时间很短,你可以这样做:

Start: 
echo "set global general_log_file=mysqllogfile;set global general_log=1;" | mysql -u root -ppasswd 

From now on all queries will appear in /var/lib/mysql/mysqllogfile 

Stop: 
echo "set global general_log=0;" | mysql -u root -ppasswd 

不要忘记完成后禁用!

您可以登录查询表mysql.general_log:

echo "set global log_output=TABLE;" | mysql -u root -ppasswd 
# restart logging 
echo "set global general_log=0;" | mysql -u root -ppasswd 
echo "set global general_log=1;" | mysql -u root -ppasswd 

注意查看general_log表还使他们更新!

+2

我其实是在寻找一种方式来做到这一点在PHP。这对MySQLi可能吗?谢谢! – Harry

+0

您可以使用php-mysqli发出这些命令并从表mysql.general_log中检索记录的查询,但是为什么?如果你编写并准备好查询,那么原始的sql是可预测的。你总是可以用你自己的类或sprintf用%d和'%s'用mysqli_real_escape_string()为所有参数准备查询,以便准备好'raw'sql然后记录它们,但据我所知,唯一的看法mysql服务器使用php-mysqli预处理语句看到的是查询general_log,并且只是一个简短的时间窗口。 –