MySQL数据库日志知识与企业应用实践(上)

MySQL数据库日志知识与企业应用实践

为了帮助管理员快速发现数据库的相关运行信息,MySQL为用户提供了几种日志种类,具体见表
wantn
默认情况下,以上所有的日志都处于非激活状态(Linux环境)。当激活日志时,所有的日志都默认配置在数据文件的目录下。管理员也可以对上述日志进行轮询切割,实现该功能常见的命令是mysqladmin flush-logs、mysqldump的“-F”或“–master-data”参数等,下面就分别介绍这几种日志知识
错误日志的介绍与配置

  • 错误日志的介绍:MySQL的错误日志用于记录MySQL服务进程mysqld在启动/关闭或运行过程中遇到的错误信息。
  • 错误日志的记录配置:MySQL的错误日志通常由mysqld或mysqld_safe程序产生,前文已经讲解过MySQL的启动原理,因此,可利用如 下方法配置记录MySQL错误日志。
    方法1:在my.cnf配置文件中调整,注意,是在[mysqld_safe]或[mysqld]模块的下面进行配置。命令如下:[mysqld]log-error = /data/mysql/error.err
    /data/mysql/error.err 都是自己手动创建的,记得修改所属的用户与所属的组为mysql ,或者修改操作权限
    chown -R mysql:mysql /data/mysql
    chmod -R 755 /data/mysql
    方法2:在启动MySQL服务的命令里加入记录错误日志的参数。
    示例如下:
    log-error=/data/mysql/error/error.err
    查看到的最终结果为:
    show variables like ‘log_error%’;
    修改文件夹的权限
  • 错误日志轮询:管理员可以使用命令轮询错误日志,例如可以按天轮询,具体方法如下:
    [root@songls~]# cd /data/mysql/error/ #<==切换到日志目录下。
    [root@songls mysql]# mv error.err error_$(date +%F).err #<==将错误日志按天
    移动改名。
    [root@songls data]# mysqladmin flush-logs #<==执行刷新日志命令。
    [root@songls data]# ls -l error.err
    -rw-rw----. 1 mysql mysql 0 Mar 19 19:34 error.err #<==新的错误日志诞生了。
  • 数据库故障排查案例分析:新手安装数据库时,遇到数据库无法启动时的排查方法具体如下。
    1)先清空错误日志文件,然后重新启动MySQL服务,再查看日志文件报什么错误,并根据错误日志进行处理。
    2)如果无法解决,则删除数据文件,重新初始化数据库。
    假设在排查故障时,得到的错误日志提示为:
    180321 17:36:26 InnoDB: Completed initialization of buffer pool
    180321 17:36:26 InnoDB: Operating system error number 13 in a file operation.
    InnoDB: The error means mysqld does not have the access rights to
    InnoDB: the directory.
    InnoDB: File name ./ibdata1
    根据提示可知,该错误是权限问题导致的问题,可对数据目录递归执行权限,然后再重启数据库。命令如下:
    [root@songls data]# chown -R mysql:mysql /data/mysql/error
    慢查询日志
  • 慢查询日志介绍
    简单地理解,慢查询日志(slow query log)就是记录执行时间超出指定值(long_query_time)或其他指定条件(例如,没有使用到索引,结果集大于1000行)的SQL语句。
  • 慢查询日志相关参数说明
    慢查询的参数,对于数据库SQL的优化非常重要,是SQL优化的前提,因此,这里以表的形式进行说明,具体见表
    wantn
  • 慢查询日志重要参数配置
    企业中常见的配置慢查询的参数为:
    slow-query-log = ON #<==慢查询开启开关
    long_query_time = 2 #<==记录大于2秒的SQL语句。
    log_queries_not_using_indexes #<==没有使用到索引的SQL语句。
    slow-query-log-file = /data/mysql/slow/slow.log #<==记录SQL语句的文件。
    min_examined_row_limit = 800 #<==记录结果集大于800行的SQL语句。
    可将上述参数配置到my.cnf里,配置完毕重启MySQL服务,并进行检查:
    mysql> show variables like ‘slow_query%’;
    ±--------------------±----------------------------+
    | Variable_name | Value |
    ±--------------------±----------------------------+
    | slow_query_log | ON | #<==开关已打开。
    | slow_query_log_file | /data/mysql/slow.log | #<==文件路径已生效。
    ±--------------------±----------------------------+
    2 rows in set (0.00 sec)
    mysql> show variables like ‘%long_query%’;
    ±----------------±---------+
    | Variable_name | Value |
    ±----------------±---------+
    | long_query_time | 2.000000 | #<==记录大于2秒的查询已生效。
    ±----------------±---------+
    1 row in set (0.01 sec)
    mysql> show variables like ‘%log_queries_not%’;
    ±------------------------------±------+
    | Variable_name | Value |
    ±------------------------------±------+
    | log_queries_not_using_indexes | ON | #<==记录没有使用索引的查询已生效。
    ±------------------------------±------+
    1 row in set (0.00 sec)

mysql> show variables like ‘%min_examined_row_limit%’;
±-----------------------±------+
| Variable_name | Value |
±-----------------------±------+
| min_examined_row_limit | 800 | #<==记录查询结果集大于800行的SQL已生效。
±-----------------------±------+
1 row in set (0.00 sec)
到此,就已经设定好记录慢查询SQL语句的条件了,那么,对于每天所产生的大量慢查询,又该如何处理和分析呢?

  • 慢查询日志的刷新方法
    在工作中,可以利用定时任务按天对慢查询日志进行切割,然后再分析。
    示例切割脚本如下:
    [root@oldboy data]# mkdir /server/scripts/ -p
    [root@oldboy data]# cat /server/scripts/cut_slow_log.sh
    export PATH=/application/mysql/bin:/sbin:/bin:/usr/sbin:/usr/bin
    cd /data/mysql/slow
    mv slow.log slow.log.$(date +%F)
    mysqladmin flush -log
    将上述脚本放入定时任务,每天0点执行切割任务,配置结果如下:
    [root@oldboy data]# tail -2 /var/spool/cron/root
    #cut mysql slow log by oldboy at 20180324
    00 00 * * * /bin/sh /server/scripts/cut_slow_log.sh >/dev/null 2>&1
  • 使用工具分析慢查询日志
    实际工作中,慢查询的日志可能非常多,给运维人员的优化工作带来了一定的困难,MySQL官方提供了慢查询的分析工具mysqldumpslow,有兴趣的读者可以参考官方手册。
    下面为大家介绍一款很不错的第三方分析工具mysqlsla(需要单独安装该工具)。
    (1)安装mysqlsla
    请提前下载好mysqlsla-2.03.tar.gz到指定目录下,然后执行如下命令安装:
    yum install perl-devel perl-DBI -y
    rpm -qa perl-devel perl-DBI
    tar -xf mysqlsla-2.03.tar.gz
    cd mysqlsla-2.03
    perl Makefile.PL
    make
    make install
    (2)利用mysqlsla工具分析慢查询
    mysqlsla命令的默认路径为:/usr/local/bin/mysqlsla。
    简单语法如下:
    mysqlsla -lt slow [SlowLogFilePath] > [ResultFilePath]
    在实际工作中,通常使用脚本调用mysqlsla工具进行分析,然后每天早晨8点,把分析结果发给企业的核心人员(DBA、运维总监、CTO、研发总监、核心开发),最后由DBA配合核心开发共同优化这些棘手的SQL慢查询。

二进制日志的介绍与配置转下篇博客
二进制日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值