mysql全局日志
show global variables like 'general_log%'; 查询全局日志情况
set global general_log = 1; 开启mysql全日志,开启全日志就会记录所有提交到mysql的sql,因此会对mysql产生很大性能影响。一般只在测试中使用,线上请关闭!
set global general_log_file='E:\phpStudy\MySQL\storm.log'; 设置日志路径
general_log=ON
general_log_file=D:\ca\MySQL\mysql-5.7.19-winx64\data\mysql.log
mysql慢查询
SHOW VARIABLES LIKE '%slow_query_log%'; 查询慢sql情况
slow_query_log=ON 开启
slow_query_log_file 慢日志文件位置
long_query_time=2 执行时间超过2秒的sql会被记录下来,MySQL参数long_query_time默认的2s阈值太大,可能不适用,对于一般的OLTP应用,建议将阈值设置得更小,比如 200~500ms。有时手动调整了某变量的值,且需要永久变更,这时则要注意全局变量的值应和配置文件保持一致,配置文件的 参数示例如下所示
[mysqld]
slow_query_log=1
slow_query_log_file=/usr/local/mysql/log/slowquery.lo
long_query_time=0.5
其中,slow_query_log设置为1表示开启慢查询日志,设置为0则表示关闭慢查询日志。long_query_time的单位为秒,MySQL 5.1.21后可以设置毫秒级的慢查询记录,如设置long_query_time=0.01。
还可以通过show global status like '%Slow_queries%'; 查询当前记录了多少条慢sql
另外有一个参数log-queries-not-using-indexes,用于指定如果没有使用到索引或虽然使用了索引但仍然遍历了所有记录,就将其记录下来到慢查询里,即使该查询的时间没有超过long_query_time
SHOW VARIABLES LIKE '%log_queries_not_using_indexes%'
log_queries_not_using_indexes=1 开启
注意 对于持久连接(长连接)、连接池这类情况,由于不能重置session会话的变量,因此即使修改了 long_query_time的值,也不能马上生效,这会给我们带来一些困扰,不过,使用短连接或使用Percona版本的MySQL可以解决此问题。但对于测试人员或开发人员来说,这点是很方便调整和验证的,重启应用或重连数据库即可解决此问题。
真正配置到正式环境请这样使用
#——--------—-MysQL Log setting------------——#
log_error=mysql-error.log
log_bin=mysql-bin.log
slow_query_log_file=mysql-slow.log
relay_log=mysql-relay.log
log_slave_updates=1
sync_binlog=1
relay_log_recovery=1
binlog_format=row
expire_logs_days=30
slow_query_log=1
long_query_time=2
log_queries_not_using_indexes=1
log_throttle_queries_not_using_indexes=10
log_slow_admin_statements=1
log_slow_slave_statements=1
min_examined_row_limit=1000
log_output=FILE,TABLE
log_timestamps=system
1、slow_query_log :表示是否开启慢查询日志,此参数与log_slow_queries的作用没有区别,5.6以后的版本使用此参数替代log_slow_queries。
2、slow_query_log_file :当使用文件存储慢查询日志时(log_output设置为”FILE”或者”FILE,TABLE”时),指定慢查询日志存储于哪个日志文件中,默认的慢查询日志文件名为”主机名-slow.log”,慢查询日志的位置为datadir参数所对应的目录位置,一般情况下为 /var/lib/mysql
3、long_query_time :表示”多长时间的查询”被认定为”慢查询”,此值得默认值为10秒,表示超过10秒的查询被认定为慢查询。
4、log_queries_not_using_indexes :表示如果运行的sql语句没有使用到索引,是否也被当做慢查询语句记录到慢查询日志中,OFF表示不记录,ON表示记录。
5、log_throttle_queries_not_using_indexes :5.6.5版本新引入的参数,当log_queries_not_using_inde设置为ON时,没有使用索引的查询语句也会被当做慢查询语句记录到慢查询日志中,使用log_throttle_queries_not_using_indexes可以限制这种语句每分钟记录到慢查询日志中的次数,因为在生产环境中,有可能有很多没有使用索引的语句,此类语句频繁的被记录到慢查询日志中,可能会导致慢查询日志快速不断的增长,管理员可以通过此参数进行控制。
6、min_examined_row_limit SQL语句检测的记录数少于设定值的语句不会被记录到慢查询日志,即使这个语句执行时间超过了long_query_time的阈值
7、log_queries_not_using_indexes 将没有使用索引的语句记录到慢查询日志
8、log_throttle_queries_not_using_indexes 设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
9、log-slow-admin-statements 记录执行缓慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等。
10、log_slow_slave_statements 记录从库上执行的慢查询语句
11、log_timestamps=system 5.7版本新增时间戳所属时区参数,默认记录UTC时区的时间戳到慢查询日志,应修改为记录系统时区
12、log_output=FILE,TABLE 指定慢查询日志的输出方式,从5.5版本开始可以记录到日志文件(FILE,慢查询日志)和数据库表(TABLE,mysql.slow_log)中