目录:
- mysql配置
- 系统配置
- logrotate
- 分析当天的日志
- AI问答
本文作者 同事 张同学
mysql配置
当前配置(重启后失效,配合my.cnf)
1 2 3 4 5 6 7 8
| SET GLOBAL slow_query_log = 1;
SET GLOBAL slow_query_log_file = "/var/lib/mysql/slow.log";
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 1;
|
/etc/my.cnf(生效需重启)
1 2 3 4
| slow_query_log=1 slow_query_log_file=/var/lib/mysql/slow.log long_query_time=1 log_queries_not_using_indexes=1
|
创建能够分割日志的用户
1 2 3
| create user 'digest'@'%' identified by 'Digest_0501'; grant reload on *.* to 'digest'@'%';
|
系统配置
安装工具
1 2 3 4 5 6 7 8
| yum -y install perl perl-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5
mkdir -p /opt/install cd /opt/install curl -fSsL -O https://downloads.percona.com/downloads/percona-toolkit/3.5.2/binary/tarball/percona-toolkit-3.5.2_x86_64.tar.gz
tar -xf percona-toolkit-3.5.2_x86_64.tar.gz
|
注册163邮箱
配置 - 非幂等
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
cat >> /etc/mail.rc << \EOF set from=xxxxx@163.com set smtp="smtp.163.com" set smtp-auth-user="xxx@163.com" set smtp-auth-password="xxxxxx" set smtp-auth=login
EOF
|
验证
1
| echo 'it is only a test' | mail -s "test eamil" notice_zszc@163.com
|
logrotate - 每天自动运行分析前一天的日志(大概3点左右)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #编写logrotate配置文件 cat << \EOF > /etc/logrotate.d/mysql-slow /var/lib/mysql/slow.log { daily rotate 7 dateext compress delaycompress missingok postrotate #备份原日志后进行慢日志的刷新 /usr/bin/mysql -udigest -pDigest_0501 -e 'flush slow logs;' dealdate=`date +%Y%m%d` #附件生成路径(需对应配置) dealpath=/tmp/mysql-slow #数据库慢日志路径(需对应配置)dealdate为logrotate处理日期 dblogpath=/var/lib/mysql/slow.log-$dealdate #logrotate配置文件名称(需对应配置) dealtype=mysql-slow #接收者邮箱(需对应配置) to=notice_zszc@163.com mkdir -p $dealpath /opt/install/percona-toolkit-3.5.2/bin/pt-query-digest $dblogpath > $dealpath/$dealtype-$dealdate.log cat $dealpath/$dealtype-$dealdate.log | iconv -t GBK -f UTF-8 | /usr/bin/mailx -s `hostname`"-$dealtype-$dealdate" -a "$dealpath/$dealtype-$dealdate.log" $to rm -f $dealpath/$dealtype-$dealdate.log endscript } EOF
#手工分割 # logrotate -f /etc/logrotate.d/mysql-slow
|
分析当天的日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| dblogpath=/var/lib/mysql/slow.log dealpath=/tmp/mysql-slow dealdate=`date +%F_%T` dealtype=mysql-slow to=notice_zszc@163.com
/opt/install/percona-toolkit-3.5.2/bin/pt-query-digest $dblogpath > $dealpath/$dealtype-$dealdate.log
cat $dealpath/$dealtype-$dealdate.log | iconv -t GBK -f UTF-8 | /usr/bin/mailx -s `hostname`"$dealtype-$dealdate" -a "$dealpath/$dealtype-$dealdate.log" $to
rm -f $dealpath/$dealtype-$dealdate.log
|
ai问答
这几个配置是MySQL中用于开启和配置慢查询日志的参数,具体含义如下:
slow_query_log=1
:将该参数设置为1表示开启慢查询日志功能。当该参数开启时,MySQL会将执行时间超过long_query_time指定时间阈值的查询语句记录到慢查询日志中。
slow_query_log_file=/var/lib/mysql/slow.log
:该参数指定了慢查询日志的文件路径和名称。在上面的配置中,慢查询日志文件被设置为/var/lib/mysql/slow.log
。
long_query_time=1
:该参数指定了查询执行时间的阈值,单位为秒。当查询执行时间超过该阈值时,MySQL会将该查询记录到慢查询日志中。在上面的配置中,查询执行时间超过1秒的语句会被记录到慢查询日志中。
log_queries_not_using_indexes=1
:该参数控制是否记录未使用索引的查询语句。将该参数设置为1表示记录未使用索引的查询语句,将其设置为0表示不记录。在上面的配置中,未使用索引的查询语句也会被记录到慢查询日志中。
总的来说,上述配置的含义是开启慢查询日志功能,并将慢查询日志文件设置为/var/lib/mysql/slow.log
,将查询执行时间阈值设置为1秒,同时记录未使用索引的查询语句。这些配置可以帮助我们诊断和分析慢查询问题,以优化数据库性能。需要注意的是,开启慢查询日志功能会对数据库的性能产生一定影响,因此应该在生产环境中谨慎使用,并避免将日志文件存储在磁盘速度较慢或可用空间较小的位置。