MySQL 日志管理

         因为日志文件是掌握数据库运行状态的重要参数,所以日志文件的维护也有十分重要的意义。Mysql 的日志类型有错误日志、通用查询日志、二进制日志、慢查询日志。mysql

1.  错误日志sql

    (1) 错误日志主要是记录当MySQL 启动和中止时,以及在运行过程当中发生任何错误时的相关信息。错误日志默认保存在 MySQL 的安装路径 data 文件夹下,后缀名是 .err 。数据库

[root@localhost mysql]# cd data/
[root@localhost data]# ls
auto.cnf  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  ibtmp1  mysql  performance_schema  sys
vim

(2)在tata 文件夹下,此时尚未错误日志。在Mysql  的配置文件中,能够指定日志文件的保存位置和日志的文件名。若是没有指定文件名,使用socket

host_name.err 做为文件名。ide

[root@localhost data]# vim /etc/my.cnf                                   //修改主配置文件工具

[mysqld]
测试

log-error=/usr/local/mysql/data/mysql_error.log                    //指定保存错误日志的位置优化

(3)重启 MySQL , 生成 mysql_error.log  用来记录错误日志。this

[root@localhost data]# systemctl restart mysqld.service                             //重启mysql
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql            performance_schema
ib_buffer
_pool  ib_logfile0  ibtmp1       mysql_error.log  sys                                   //错误日志

2.通用查询日志

  (1) 通用日志用来记录MsQL 的全部链接和语句,默认时关闭的。使用 SHOW语句能够查询出日志的信息。

mysql> show variables like 'general%';
+------------------+-------------------------------------+
| Variable_name    | Value                               |
+------------------+-------------------------------------+
| general_log      | OFF                                 |                                              //通用查询日志  默认关闭
| general_log_file | /usr/local/mysql/data/localhost.log |
+------------------+-------------------------------------+
2 rows in set (0.00 sec)

(2) 修改 MySQL 配置文件,开启通用查询日志,指定通用查询日志的位置。

[root@localhost data]# vim /etc/my.cnf

[mysqld]

general_log=ON                                                                                          //开启通用查询日志
general_log_file=/usr/local/mysql/data/mysql_general.log              //指定位置

(3)重启 mysql 服务,通用查询日志生效

[root@localhost data]# systemctl restart mysqld.service
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql            mysql_general.log   sys                            通用查询日志
ib_buffer_pool  ib_logfile0  ibtmp1       mysql_error.log  performance_schema

(4)使用SHOW 语句查看通用查询日志已经打开,general_log 对应的值是 ON。

mysql> show variables like 'general%';
+------------------+-----------------------------------------+
| Variable_name    | Value                                   |
+------------------+-----------------------------------------+
| general_log      | ON                                      |
| general_log_file | /usr/local/mysql/data/mysql_general.log |
+------------------+-----------------------------------------+
2 rows in set (0.00 sec)


3二进制日志

        (1)二进制日志用来记录全部更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,主要目的是在恢复数据时可以最大程度的恢复数据库。二进制是默认开启的,在data 文件夹下,数据量大时,它会自动分割成多个日志文件,以数字做为扩展名。

mysql> show variables like 'log_bin%';
+---------------------------------+---------------------------------------+
| Variable_name                   | Value                                 |
+---------------------------------+---------------------------------------+
| log_bin                         | ON                                    |
| log_bin_basename                | /usr/local/mysql/data/mysql-bin       |
| log_bin_index                   | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF                                   |
| log_bin_use_v1_row_events       | OFF                                   |
+---------------------------------+---------------------------------------+
5 rows in set (0.00 sec)

   修改MySQL  配置文件 添加 log_bin=mysql-bin  语句。

[root@localhost data]# vim /etc/my.cnf

[mysqld]

log_bin=mysql-bin

(2)重启 mysql 服务,二进制日志生效

[root@localhost data]# systemctl restart mysqld.service
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql             mysql-bin.index  mysql_general.log   sys
ib_buffer_pool  ib_logfile0  ibtmp1      mysql-bin.000001  mysql_error.log  performance_schema            //二进制日志

(3)二进制日志能够使用MySQL 的工具 mysqlbinlog 查看二进制文件。

[root@localhost data]# mysqlbinlog --no-defaults mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#180829 16:05:21 server id 1  end_log_pos 123 CRC32 0x8d08f4c5     Start: binlog v 4, server v 5.7.17-log created 180829 16:05:21 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
wVOGWw8BAAAAdwAAAHsAAAABAAQANS43LjE3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADBU4ZbEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AcX0CI0=
'/*!*/;
# at 123
#180829 16:05:21 server id 1  end_log_pos 154 CRC32 0xabee8725     Previous-GTIDs
# [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

4.慢查询日志

       慢查询日志记录全部执行时间超过long_query_time  秒的 SQL 语句,用于找到那些查询语句执行时间长,以便对其进行 优化。默认慢查询日志是关闭的, slow_query_log 是慢查询的选项,默认时OFF 。

mysql> show variables like '%slow%';                                    //查看MySQL  慢查询功能是否开启
+---------------------------+------------------------------------------+
| Variable_name             | Value                                    |
+---------------------------+------------------------------------------+
| log_slow_admin_statements | OFF                                      |
| log_slow_slave_statements | OFF                                      |
| slow_launch_time          | 2                                        |
| slow_query_log            | OFF                                      |                               //状态为OFF
| slow_query_log_file       | /usr/local/mysql/data/localhost-slow.log |
+---------------------------+------------------------------------------+
5 rows in set (0.00 sec)

(1)能够使用 SQL 语句开启慢查询功能。

mysql> set global slow_query_log=ON;                    //开启 MySQL 慢查询功能
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%slow%';
+---------------------------+------------------------------------------+
| Variable_name             | Value                                    |
+---------------------------+------------------------------------------+
| log_slow_admin_statements | OFF                                      |
| log_slow_slave_statements | OFF                                      |
| slow_launch_time          | 2                                        |
| slow_query_log            | ON                                       |                     //状态为ON
| slow_query_log_file       | /usr/local/mysql/data/localhost-slow.log |
+---------------------------+------------------------------------------+
5 rows in set (0.01 sec)

(2)开启MySQL 慢查询功能还能够在 MySQL 的配置文件中进行设定。

[root@localhost data]# vim /etc/my.cnf

[mysqld]

slow_query_log=ON                                                   //启动慢查询功能
slow_query_log_file=mysql_slow_query.log        //指定存放慢查询日志文件位置
long_qurey_time=1                                                      //设置了超过 1 秒执行的语句被记录

重启MySQL 后,慢查询日志 mysql_slow_query.log 被建立。常常检查慢查询日志,当有查询语句被记录,就须要对其进行优化处理。

[root@localhost data]# systemctl restart mysqld.service                             //重启MySQL
[root@localhost data]# ls
auto.cnf        ib_logfile1         mysql-bin.000001  mysql_error.log       sys
ib_buffer_pool  ibtmp1              mysql-bin.000002  mysql_general.log
ibdata1         localhost-slow.log  mysql-bin.000003  mysql_slow_query.log     //慢查询日志
ib_logfile0     mysql               mysql-bin.index   performance_schema

查看慢查询时间设置

mysql> show variables like 'long_query_time';               //查看慢查询时间设置
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |                          //慢查询时间为 1 秒,与以前配置文件中时间相同
+-----------------+----------+
1 row in set (0.00 sec)

进行慢查询测试生成慢查询日志。

mysql> select sleep(6);                                    //休眠6s
+----------+
| sleep(6) |
+----------+
|        0 |
+----------+
1 row in set (6.00 sec)

mysql> show global status like '%slow%';      //查看慢查询状态
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| Slow_launch_threads | 0     |
| Slow_queries        | 1     |
+---------------------+-------+
2 rows in set (0.00 sec)

查看生成的慢查询日志

[root@localhost data]# cat mysql_slow_query.log               //查看生成的慢查询日志
/usr/local/mysql/bin/mysqld, Version: 5.7.17-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /usr/local/mysql/mysql.sock
Time                 Id Command    Argument
/usr/local/mysql/bin/mysqld, Version: 5.7.17-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /usr/local/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 2018-08-29T09:04:25.235721Z
# User@Host: root[root] @ localhost []  Id:     4
# Query_time: 6.001888  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1535533465;
select sleep(6);                     // 休眠 6 秒

相关文章
相关标签/搜索