易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 3889|回复: 1
收起左侧

centos下mysql日志采集

[复制链接]
发表于 2017-9-27 16:19:58 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 2 金钱 才能浏览
 楼主| 发表于 2017-9-27 16:20:58 | 显示全部楼层
通过 MySql 配置启用日志
4 I9 k% V9 ~  \6 v! L1 C- u4 e* K- k
日志相关参数位于 [mysqld] 部分。( s, }* d" `, e7 R& u0 O- a* y
编辑 MySql 配置文件:
5 T5 Y: Z& w3 k5 Y$ unano /etc/mysql/my.cnf
. S$ F' }* ?/ M以上是 Debian 下的默认安装目录,其他 Linux 发布版可能不太一样,这个文件中 MySql 服务器的参数如下:
6 a. n; p2 N- ~9 b& l# * Logging and Replication$ r3 o/ g. `; L3 \- ~( Z. S9 _
#( |- @* p' Y, `1 u
# Both location gets rotated by the cronjob.# c, h7 S5 r5 T% e8 Y# r
# Be aware that this log type is a performance killer.
! l1 K4 @. H( H# As of 5.1 you can enable the log at runtime!/ Z+ g( P0 M% J  G
#general_log_file = /var/log/mysql/mysql.log; L- S. l, F& g  v0 }  C( v
#general_log = 1
: B- [% `: p1 T#. ~  ^0 M* n2 q7 v6 d/ o( ?3 M
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.( X* B9 t1 t* n, f; @4 c% M: f
#1 I! G4 @& _% u, [! u! E
# Here you can see queries with especially long duration
) T: X2 g# G* h1 u* u#log_slow_queries = /var/log/mysql/mysql-slow.log
4 a" D. i8 Z3 t( _#long_query_time = 2, c4 a5 Z3 u2 K# R8 s& L
#log-queries-not-using-indexes* B0 Y" W8 h1 r! @5 e
#7 C$ E: e( T7 `( \
# The following can be used as easy to replay backup logs or for replication.7 g' Z# _) j, M: a3 S, x% D+ W/ ^
# note: if you are setting up a replication slave, see README.Debian about; t; p9 s9 s0 E9 X; J* i& z+ M
# other settings you may need to change.
& I4 X3 m0 N' \* E3 p+ N2 I' c: v#server-id = 1, n  T$ v2 K* Q4 R0 d: M' E
#log_bin = /var/log/mysql/mysql-bin.log0 r* x  i; d$ v
expire_logs_days = 106 @+ o% z8 X- W! K1 e
max_binlog_size = 100M! W* a: |9 i5 {3 @
#binlog_do_db = include_database_name
8 w! b* Y+ B8 k6 `  u- I#binlog_ignore_db = include_database_name
" c( E5 R& a9 I5 x1 N+ k( \MySql 安装默认是不启用所有日志文件的(Windows 平台下的 error 日志除外)。Debian 安装 MySql 默认是将 error 日志发送给 syslog。
/ ~' ~! h. T2 x/ {. ^& zerror 日志
6 L% r/ `/ b2 p8 d0 C" y
% R& W* D+ a6 q8 l. D  a. a根据 /etc/mysql/conf.d/mysqld_safe_syslog.cnf 配置,error 日志推送给 syslog:' C3 o0 I) d6 f$ d, x5 W
[mysqld_safe]& ^! o; o( C* v) e8 U
syslog
: F8 R1 B( x6 V7 g" g这是推荐的做法。如果你由于某种原因,不想讲 error 日志推给 syslog,将 /etc/mysql/conf.d/mysqld_safe_syslog.cnf 文件中的上述行注掉,或者直接删除掉这个文件,然后在 /etc/mysql/my.cnf 中添加以下行:
" {/ Z# O! v$ @; N' P) r[mysqld_safe]
8 P" K3 {8 A7 Blog_error=/var/log/mysql/mysql_error.log
8 b; z& B. n& P$ u, Y
. v9 `: u4 y" \# k8 q( O[mysqld]$ c5 u( `& p" \9 C( [! F: [# \
log_error=/var/log/mysql/mysql_error.log6 o( @* [3 l+ ~9 b# J* Q
一般查询日志! }! b3 r: ^& L3 l( T% X2 Z+ }

0 v; {2 i; L& e+ _% r要启用一般查询日志,将相关行取消注释(或者添加)即可:* g* ^$ T9 Z8 c; v) z
general_log_file = /var/log/mysql/mysql.log* H! E5 C! U* e. s  x
general_log = 16 J0 E. W+ R4 q" ?& N
慢查询日志
' W- a7 @5 O3 I4 i6 k
/ T5 ^4 x8 n& H1 O5 W要启用慢查询日志,将相关行取消注释(或者添加)即可:
* p: Z, z( H3 K/ v& a* X: f' jlog_slow_queries = /var/log/mysql/mysql-slow.log
' W$ U4 u0 W* B  `long_query_time = 2
8 d6 M1 ?5 P  C! a' `7 qlog-queries-not-using-indexes
  @7 Z/ C3 f2 y1 O: F  o* ~" P配置修改后重启 MySql 服务器: _  x4 T- T* W! P/ {! G2 R

  y. V, e" V& H- `, R' ~( \8 s以上方法要求服务重启才能生效:
6 g( V* c$ R" b7 F% e$ k5 G. A# bservice mysql restart/ e+ L. [  ], n
或者使用 systemd:8 X! X1 C# s' B
systemctl restart mysql.service
8 g( V# l4 ^7 d" Y7 d9 {) N1 {; a# E& Q) x7 d$ M& P: f# }

# S! I# U( _( q. f; B$ B. n* b: [4 Z7 u% r7 j* y9 f! h+ B
运行时启用日志0 [; D7 \5 R' {9 M+ W

6 g2 w5 q, P3 x1 Q& s# gMySql 5.1 之后我们可以在运行时启用或者禁用日志。
( N! P" C0 Y! L% S1 L9 c7 w6 S运行时启用日志,登录 MySql 客户端(mysql -u root -p)然后执行:
& j. q4 W/ A& ESET GLOBAL general_log = 'ON';- N$ B9 B3 I( N/ U% C. _& ^, f
SET GLOBAL slow_query_log = 'ON';
( H# a+ ]$ b- j% ^* B' n运行时禁用日志,登录 Mysql 客户端(mysql -u root -p)后执行:6 D+ m8 x& K+ Y
SET GLOBAL general_log = 'OFF';5 X% k, \) R7 X/ F5 g% d
SET GLOBAL slow_query_log = 'OFF';5 @/ t5 h3 [  J
这种方式适用于所有平台并且不需要重启服务。2 i( I7 f3 U$ P, D1 o, ]$ n! p

0 r/ c4 X% q/ @0 } - j1 P) J9 v/ b2 {1 B0 x8 z
' t% Z9 t! |5 {& Z: I
显示日志结果* }# _+ e; w3 _. S3 L
2 f  i* ]/ |' y! ^( s5 _! y8 Q
error 日志
" i! A+ b  \2 Q" d- ?# J
* _: @  ?2 H  O( A+ t" _, z按以上办法设置以后,你可以通过以下命令显示 error 日志:
% z3 x; ?2 x' z6 Q* Gtail -f /var/log/syslog9 Y1 h% _2 v3 f
备注:如果你没有配置 error 日志文件,MySql 将把 error 日志保存在数据目录(通常是 /var/lib/mysql)下的一个名为 {host_name}.err 的文件中。) O7 n/ v" l& o9 t- o, P: |
普通查询日志
6 d6 ?4 {3 ]0 S; z& y# E# {
+ S0 Q: A# ?1 `$ X9 t按以上办法设置以后,你可以通过使用以下命令来显示普通日志:5 X# Q$ U  |& h- o. X9 n
tail -f /var/log/mysql/mysql.log' p( D7 J* @/ M  y7 V9 [
备注:如果你没有配置普通日志文件,MySql 将把普通日志保存在数据目录(通常是 /var/lib/mysql)下的一个名为 {host_name}.log 的文件中。
$ Z, M1 K9 a  h' Z& {$ ~2 y慢查询日志+ u6 b0 i: i( z9 o
0 o  ^( ~% p2 ]) h
按以上办法设置以后,你可以通过使用以下命令来显示慢查询日志:
) k, ^7 [& X9 x8 u, ]: dtail -f /var/log/mysql/mysql-slow.log# `/ K- g3 P/ Z3 Y% g
备注:如果你没有配置慢查询日志文件,MySql 将把普通日志保存在数据目录(通常是 /var/lib/mysql)下的一个名为 {host_name}-slow.log 的文件中。4 L6 {; N$ c7 E& _* u: b7 t; v
( H3 y6 p; P/ I3 h. v* H

# ~  z, T" z, v& G  V, p
8 D, b# S7 R1 j9 u; o  m0 a+ \循环日志: t/ Y7 N( ^# C& s# a+ u/ N( r

6 ^9 Z! Y' {% ]  f% k别忘了滚动日志,否则的话日志文件可能会变得很庞大。
/ i* |/ y3 ]" j! @' {2 H在 Debian(以及 Debian 派生系列诸如 Ubuntu 等)系统,MySql 初始安装之后,循环日志就已经使用了 logrotate:8 O2 Z' j9 ~, r! X5 `3 {3 M
nano /etc/logrotate.d/mysql-server( B1 t7 Z6 ]- N% n
对于其他 Linux 发行版,可能需要做一些改动:
' M1 S, i2 ^9 J# - I put everything in one block and added sharedscripts, so that mysql gets
( n! z5 m2 O+ N& z0 |5 o2 }#   flush-logs'd only once.' c3 o& E4 x- @( t
#   Else the binary logs would automatically increase by n times every day.
& w6 u) v( K4 b# - The error log is obsolete, messages go to syslog now.
3 S9 Z7 c# g  b# p/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log {3 f/ @4 y) B% n9 ~$ w% F
        daily
/ O4 P3 {' F( |$ Z1 P8 |& D$ D% g        rotate 7
# ?1 u  B6 a6 N        missingok; Z, j0 J. Q" r- t0 G; s
        create 640 mysql adm5 [0 C: k, y" z6 K
        compress
0 f2 C5 T3 p5 y$ f/ p5 k1 ?2 I5 i        sharedscripts
0 R$ Q' ~8 a3 p8 f5 g* [! r" X        postrotate
6 d4 N/ `8 m; c( s* {                test -x /usr/bin/mysqladmin || exit 0
+ J, h$ q# A, z" }                # If this fails, check debian.conf!7 Q3 {. f' }2 f- K* q
                MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"* y  @. V( U/ L
                if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
5 R/ K! F/ A/ @. R  e, D                  # Really no mysqld or rather a missing debian-sys-maint user?9 f0 }# m" G7 k( f& K3 ~
                  # If this occurs and is not a error please report a bug." D) ?9 [3 m# V
                  #if ps cax | grep -q mysqld; then
0 z: ]  R5 W, I- |) @' s6 q                  if killall -q -s0 -umysql mysqld; then% _2 h# o# C1 e( ~% I: {: A- E
                    exit 1
. f! ^- D& R; J! W6 o! q                  fi
8 d* A  w$ e% X, U                else2 {& I% \$ x, ]9 J# {
                  $MYADMIN flush-logs
  ~& j, D: G0 \$ g+ W0 N$ L                fi- S$ q$ Z4 Y# i" {+ x. ^) Q
        endscript- }" }  \( J9 Y
}% N% ^- h3 m3 v) v
# z+ r7 C) p2 o1 K; @
$ L. S  y5 W, v5 |

, u; l$ U3 F+ `) ^( M3 P2 F5 X检验服务器配置4 U; }: a) j3 Q7 Z+ b/ n  ~% p

# X; k- E( s6 Y& L! f$ }' ]* D# q; S使用 show variables like '%log%'; 来检查服务器和日志文件相关的变量:, Z* C2 A' t' Q
root@cosmos ~ # mysql -uroot -p
! _/ N+ m, [6 ^4 ~- f1 z# S' p5 lEnter password:
7 n! I7 D& t, ]% M1 BWelcome to the MySQL monitor. Commands end with ; or \g.5 N( T* c6 H, Y: J
Your MySQL connection id is 144332( X$ I5 @- B. ?- w1 {/ K6 m: a
Server version: 5.5.31-0+wheezy1 (Debian)
( A% m; a9 r. R! i  q6 X: O" S: e1 T0 J( S' l9 [6 E
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
/ G! s3 U( q6 @" f$ I" b; c" c2 W! @9 a$ V
Oracle is a registered trademark of Oracle Corporation and/or its
: E5 d$ k) D2 R  ?. @. H1 f! X2 Qaffiliates. Other names may be trademarks of their respective
, |! ?9 O# |. Yowners./ ^0 X. }( m' B9 Q8 \1 W
! T9 x: I5 A( D
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.& k9 q7 O7 c/ W4 i) C8 k

  J' H% V$ ?8 d! Vmysql> show variables like '%log%';
; ?5 G0 K, @" j* q; }* D+-----------------------------------------+--------------------------------+9 }3 F- H/ U9 D1 V* V! {
| Variable_name | Value |- m' ?: P- }9 u; v# [2 y
+-----------------------------------------+--------------------------------+$ \9 ]* S$ }/ g
| back_log | 50 |
- a7 |2 S) W0 W7 Y| binlog_cache_size | 32768 |
! u( }5 R+ s; d2 n| binlog_direct_non_transactional_updates | OFF |3 [( U. s6 G8 c  X& E" U# F
| binlog_format | STATEMENT |
* |* H) M( w0 T, k| binlog_stmt_cache_size | 32768 |
0 c" n4 s& f$ w) ~9 G8 g, }1 ^| expire_logs_days | 10 |; e& N$ j9 s$ {
| general_log | OFF |
7 T0 z+ H, r+ J' @| general_log_file | /var/lib/mysql/cosmos.log |; Y# k3 Q+ o  ~0 C+ a) {8 e
| innodb_flush_log_at_trx_commit | 1 |6 x1 W4 t3 H, d  B$ i* a( \
| innodb_locks_unsafe_for_binlog | OFF |8 z( Q2 X0 K, }# V% `
| innodb_log_buffer_size | 8388608 |
* j8 Q/ s6 X9 u& l1 H1 _! F| innodb_log_file_size | 5242880 |  W  x. G6 d+ j1 C! f. N
| innodb_log_files_in_group | 2 |
+ Q$ H2 O7 o) E' Y| innodb_log_group_home_dir | ./ |- M* _! f0 c" d& D) i
| innodb_mirrored_log_groups | 1 |1 u# U) R8 E0 X  F: X1 E" C3 h6 s
| log | OFF |7 Y) a0 Z) q+ q4 S/ v3 I4 b
| log_bin | OFF |2 n3 [4 }- q3 v) X
| log_bin_trust_function_creators | OFF |
  f$ i: Z% B2 F& j| log_error | |7 T, h: d$ P$ X1 u) M/ s  p
| log_output | FILE |, u4 p( ^! E' U/ `8 w3 Z2 F
| log_queries_not_using_indexes | OFF |
! g/ f0 I0 P3 u! g; ^# g/ H| log_slave_updates | OFF |3 n2 C& K/ m* E) s5 }+ Q
| log_slow_queries | OFF |; O6 s6 E2 y( y+ l& f
| log_warnings | 1 |1 Z" w6 s& b+ Y& o2 r
| max_binlog_cache_size | 18446744073709547520 |6 ^. `- @, ~# r% R/ d
| max_binlog_size | 104857600 |
% X; r. ?6 `2 F( x" B" `9 o| max_binlog_stmt_cache_size | 18446744073709547520 |7 a9 B0 s1 D. ]+ @9 Y( X7 i
| max_relay_log_size | 0 |
' ^) A! U" S0 \: |; T| relay_log | |6 ~& m! M" {* D
| relay_log_index | |
# t: o" R$ N% h% Z| relay_log_info_file | relay-log.info |
0 l2 e" @! w  ?( }1 x( ?6 Z" s( s| relay_log_purge | ON |
" @2 h2 ~6 m+ E4 e5 d| relay_log_recovery | OFF |% n* y4 b  O# _! B, S
| relay_log_space_limit | 0 |, Y8 n; K0 Z4 P) u) z
| slow_query_log | OFF |- Q7 y4 W: k3 g0 z. t- m
| slow_query_log_file | /var/lib/mysql/cosmos-slow.log |4 c6 ]' c2 X4 d, L  z, _% [0 _
| sql_log_bin | ON |4 U, \( H9 i7 g
| sql_log_off | OFF |
4 m7 ^0 y) s! D+ e0 M- u; @1 C| sync_binlog | 0 |
( R) f: Z) \! A; o| sync_relay_log | 0 |' \: \! @1 ~/ A' ?( L
| sync_relay_log_info | 0 |" G4 H6 j  }1 U1 s8 X7 |2 j6 j
+-----------------------------------------+--------------------------------+
4 \6 Y9 G' _0 v; X# E: b: q41 rows in set (0.00 sec)
5 }% _0 C! c8 B4 D服务器变量相关官方文档参考 https://dev.mysql.com/doc/refman/5.7/en/server-options.html
- F  h5 i1 t! I- y) F* F. S9 p" G! w. l( w1 D$ ~6 M

5 `8 V( N! ~6 o% |2 h9 u: f" l% [% g1 [3 m8 o. \0 i0 C  q
何时启用日志, t$ I0 |4 D* e
1 ?( f# r& L- f  x* E
MySql 默认安装的话,所有的日志文件都不会被启用的(除了 Windows 平台上的 error 日志)。Debian 上安装默认将 error 日志发给 syslog。
7 j8 L" C. Q( s* l* E% u$ T实际上,在很多情况下日志文件都可以提供关键问题的解决办法:) O1 l7 z4 u4 k* ?0 _3 b  i
总是启用 error 日志在这些情况下开启普通查询日志(最好在运行时):检查你的应用是否正确处理了 MySql 数据库连接(一个常见的错误就是从一个单一脚本多次连接到 MySql);监控来自你的应用的查询的执行情况;测试 memcached(或者类似的软件),检查某查询是被 db 执行还是被 memcached 处理当你的应用由于某些原因造成性能下降而你想找到这些慢查询时,启用慢查询日志(MySql 最好是在短期内这样配置,比如 2-3 天)/ @. b  ^3 w% @+ ]' [8 Z
0 q9 S7 B5 j: c# W2 J

  g) u$ r# R$ d6 Q3 h% b1 x示例- ~3 Y( h* f; e% z; _
' ?. ?- O( T3 u+ I* f3 J
以下是一个 MySql 普通日志的示例:
/ I& k; }5 g6 v7 Q* c$ z" Q131021 17:43:50 43 Connect root@localhost as anonymous on pnet_blog2 O1 T$ Z6 I7 I6 |; l0 P6 x
43 Init DB pnet_blog! G( O0 V/ I; w- o
43 Query SELECT count(id) as total_posts FROM posts WHERE date_published is not null AND date_published <= '20131021144350'
% O1 j! d3 j$ v43 Query SELECT * FROM posts WHERE date_published is not null AND date_published <= '20131021144350' ORDER BY date_published DESC LIMIT 0,10
6 b1 [  V5 d% i! a44 Connect root@localhost as anonymous on pnet_blog
. t; ~( x; |+ Y* I( s( N* r44 Query SELECT id, title, impressions FROM tips WHERE date_published IS NOT NULL AND date_published <= '20131021144350' ORDER BY date_published DESC LIMIT 0, 108 v' Y6 B" c5 g
44 Quit
( t, p- r0 c, I7 U- w" g43 Quit
& f+ F) v- c4 m  H131021 17:44:28 45 Connect root@localhost as anonymous on pnet_blog" I4 P& c0 o( H; V
45 Init DB pnet_blog
) {( y; T: w+ M7 A0 v* j6 Y45 Query SELECT * FROM posts WHERE url='how-and-when-to-enable-mysql-logs'
; A; E% n# C$ e, Y45 Query UPDATE posts SET impressions=impressions+1 WHERE id='41'
4 U2 ^0 U" A; [. t: T45 Query SELECT url, post_title FROM posts WHERE date_published IS NOT NULL AND date_published < '20131020150000' ORDER BY date_published DESC LIMIT 0,1  r$ E5 g, a& o1 |* M" J  X) O: L
45 Query SELECT url, post_title FROM posts WHERE date_published IS NOT NULL AND date_published > '20131020150000' ORDER BY date_published ASC LIMIT 0,1
3 K$ S$ x, p- t45 Query SELECT * FROM posts WHERE date_published is not null AND date_published <= '20131021144428' AND date_published >= '20130421144428' ORDER BY impressions DESC LIMIT 0,10
) U: ~6 I7 b" B3 s+ r: j46 Connect root@localhost as anonymous on pnet_blog
" z0 E% w& h2 w& ^6 K46 Query SELECT id, title, impressions FROM tips WHERE date_published IS NOT NULL AND date_published <= '20131021144428' ORDER BY date_published DESC LIMIT 0, 10
) x: t( s/ t& n" V46 Quit0 G% r: U4 I% D" H
45 Quit
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 23:58 , Processed in 0.055222 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表