Mysql-14-mysql的日志管理

1.简介

  日志文件记录着mysql数据库运行期间发生的变化,如:mysql数据库的客户端连接状况、sql语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志进行数据恢复;也可以通过日志文件分析数据、优化查询等。Mysql日志管理机制比较完善,它包含了以下几种常见的日志文件、分别为:错误日志(-log-err)、查询日志(-log)、二进制日志(-log-bin)、更新日志(-log-update)及慢查询日志(-log-slow-queries)。

2.操作错误日志

  在mysql数据库中,错误日志记录着mysql服务器的启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况的相关信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息等。错误日志记录的并非全是错误信息,如mysql如何启动InnoDB的表空间文件、如何初始化自己的存储引擎等信息也记录在错误日志中。

(1)启动错误日志

  错误日志在默认情况下是开启的,并且不能被禁止。错误日志信息也可以自行配置,通过修改my.cnf文件即可。错误日志所记录的信息是可以通以log-error和log-warnings来定义的,其中log-err定义是否启用错误日志的功能和错误日志的位置,log-warning定义是否将警告信息也定义至错误日志中。-log-error=[file-name]用来指定错误日志的存放位置。如果没有指定[file-name],默认hostname.err作为文件名,默认存放在datadir目录中。

(2)查看错误日志

Linux中直接使用vi或者gdit工具来查看

mysql> show variables like 'log_error';
+---------------+---------------------------------+
| Variable_name | Value                           |
+---------------+---------------------------------+
| log_error     | /application/mysql/data/cai.err |
+---------------+---------------------------------+
1 row in set (0.00 sec)

(3)删除错误日志

  管理员可以删除很久之前的错误日志,这样可以保证mysql服务器上的硬盘空间。通过show命令查看错误文件所在位置,确认可以删除错误日志后可以直接删除文件。在mysql数据库中,可以使用mysqladmin命令来开启新的错误日志,语法如下:

mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)
执行上述命令后可以创建一个新的错误文件

3.操作查询日志

  查询日志记录了用户的所有操作,包括对数据库的增、删、查、改等信息,在并发操作多的环境下会产生大量的信息,从而导致不必要的磁盘IO,会影响mysql的性能。如不是为了调试数据库的目的建议不要开启查询日志。

查询日志包含日期和时间、服务器线程ID、事件类型以及特定事件信息的列。

(1)启动查询日志

  默认情况下查询日志是关闭的。如需打开查询日志,通过修改my.cnf文件来启动查询日志。在[mysqld]组下加入log选项,格式如下。

[mysqld]
log[=path/[filename]]
默认主机名(hostname)作为文件名,放在datadir目录中。
mysql> show variables like 'general%';
+------------------+---------------------------------+
| Variable_name    | Value                           |
+------------------+---------------------------------+
| general_log      | ON                              |
| general_log_file | /application/mysql/data/cai.log |
+------------------+---------------------------------+

(2)查看查询日志

vim查看,首先通过上述命令查看存放位置。

(3)删除查询日志

  由于查询日志记录了用户的所有操作。如果数据库的使用非常频繁,那么查询日志的数据量将会非常大,也会占用很大的磁盘空间。通过show命令查看错误文件所在位置,确认可以删除通用日志后可以直接删除文件。

Flush logs重新生成日志。

4.操作二进制日志

  Mysql数据库的二进制文件是用来记录所有用户对数据库的操作。当数据库发生意外时,可以通过此文件查看在一定时间段内用户所做的操作,结合数据库备份技术,即可实现用户操作,使数据库恢复。

(1)启动二进制日志

默认情况下是不开启二进制日志文件的,通过命令查看

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+

开启方式:在/etc/my.cnf下

[mysqld]
Log-bin=[filename]
如果没有filename,默认为hostname-bin作为文件名,放在datadir下。
如果只对指定数据库生成二进制文件,则需要添加如下语句:
Binlog-do-db=db_name(数据库名称)
如果不对指定数据库生成二进制日志,则需要添加如下语句:
Binlog-ignore-db=db_name

在datadir中生成文件

每重启一次mysql就是重新生成cai-bin。如果日志长度超过max_binlog_size的上限(默认是1G=10737418248)也会创建一个新的日志文件,通过show命令查看二进制日志的上限

mysql> show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name   | Value      |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
1 row in set (0.00 sec)
使用flush logs也会创建一个新的日志文件,查看二进制相关信息如下:
mysql> show variables like 'log_bin%'\G
*************************** 1. row ***************************
Variable_name: log_bin
        Value: ON
*************************** 2. row ***************************
Variable_name: log_bin_trust_function_creators
        Value: OFF
2 rows in set (0.00 sec)

(2)查看二进制日志

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show binary logs;
+----------------+-----------+
| Log_name       | File_size |
+----------------+-----------+
| cai-bin.000001 |      1774 |
| cai-bin.000002 |       148 |
| cai-bin.000003 |       126 |
| cai-bin.000004 |       126 |
| cai-bin.000005 |       107 |
+----------------+-----------+
5 rows in set (0.00 sec)

mysql> show binlog events in 'cai-bin.000003'\G
*************************** 1. row ***************************
   Log_name: cai-bin.000003
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 107
       Info: Server ver: 5.5.56-log, Binlog ver: 4
*************************** 2. row ***************************
   Log_name: cai-bin.000003
        Pos: 107
 Event_type: Stop
  Server_id: 1
End_log_pos: 126
       Info: 
2 rows in set (0.00 sec)

总结:开启二进制文件可以实现如下几个功能

①恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。

②复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的mysql数据库与另一台mysql数据库进行实时同步。

③审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击。

(3)删除二进制日志

  用reset master命令删除所有日志,新日志从000001开始编号

mysql> reset master;
Query OK, 0 rows affected (0.03 sec)

mysql> show binary logs;
+----------------+-----------+
| Log_name       | File_size |
+----------------+-----------+
| cai-bin.000001 |       107 |
+----------------+-----------+
1 row in set (0.00 sec)

可以看出已经删除完了

(4)使用二进制日志还原数据库

看备份那一章

5.操作慢查询日志

  优化mysql最重要的一部分工作就是先确定“有问题”的查询语句。只有先找出这些查询较慢的sql查询,才可以进一步分析原因并且优化它。慢查询日志就记录了执行时间超过了特定时长的查询,即记录所有执行时间超过最大sql执行时间(long_query_time)或未使用索引的语句。

(1)启动慢查询日志

默认情况下,慢查询日志是关闭的。可以通过配置文件my.cnf来启用,配置方式如下:

[mysqld]
Slow_query_log=[filename]
Slow_launch_time=n

cai-slow.log(默认放在datadir下)

mysql> show variables like 'slow_%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_launch_time    | 10                                   |
| slow_query_log      | OFF                                  |
| slow_query_log_file | /application/mysql/data/cai-slow.log |
+---------------------+--------------------------------------+
3 rows in set (0.00 sec)

mysql> set global slow_query_log=on;
Query OK, 0 rows affected (0.02 sec)
(上述命令也能开启)

(2)删除慢查询日志

mysql> set global slow_query_log=0;
Query OK, 0 rows affected (0.00 sec
生成一个新的慢查询日志文件:
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.00 sec)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

git上上传项目

1.注册账户以及创建仓库      要想使用github第一步当然是注册github账号了。之后就可以创建仓库了(免费用户只能建公共仓库),Create a ...

2075
来自专栏salesforce零基础学习

salesforce 零基础学习(六十四)页面初始化时实现DML操作

有的时候我们往往会遇到此种类似的需求:用户在访问某个详细的记录时,需要记录一下什么时候哪个用户访问过此页面,也就是说进入此页面时,需要插入一条记录到表中,表有用...

2238
来自专栏LanceToBigData

MySQL集群(三)mysql-proxy搭建负载均衡与读写分离

前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离。 注意:这里比较坑...

4469
来自专栏尚国

Github泄露扫描系统

配置好conf/app.ini中的参数后使用WEB参数后启动WEB服务器。默认会监听到本地的8000端口,默认的管理员账户和密码分别为:xsec和x@xsec....

5742
来自专栏xiaoxi666的专栏

linux常用命令(不断更新)

862
来自专栏技术博文

linux下的别名设置

命令:alias ll="ls -l" 但是该命令在重新登录后将会丢失 可以保存在用户目录下的.bashrc文件中,不过需要用户重新登录后才会生效,注意不要放在...

4035
来自专栏Ken的杂谈

为克隆后的CentOS虚拟机设置静态IP

CentOS虚拟机克隆后,由于网卡MAC地址等信息跟被克隆的系统一致,但是克隆后的虚拟机网卡其实已经变了,所以CentOS不会采用原来的网卡配置文件。所以克隆后...

4402
来自专栏大数据智能实战

HBase暴力删除HDFS数据后建表出现Table already exist问题的解决

在一些情况下,不得不对HBase数据进行暴力删除,这种情况如原始数据量特别大,而又不需要存储的时候。或者HBase无法启动等问题。 删除比较简单,直接调用had...

2045
来自专栏13blog.site

使用git恢复未提交的误删数据

不小心将项目中一个文件夹删除还未提交,或者已经提交, 此时想要恢复数据该怎么办? 答案是git reflog,使用git reflog命令可以帮助恢复git误操...

3275
来自专栏王硕

原 进程小程序

3658

扫码关注云+社区

领取腾讯云代金券