MySQL:日志管理

这篇博客详细介绍了MySQL的日志管理,包括错误日志、通用查询日志、慢查询日志和二进制日志的定义、配置及管理。二进制日志对于数据库恢复和复制至关重要,而慢查询日志则用于服务器性能调优。
摘要由CSDN通过智能技术生成

MySQL日志类型

1.错误日志

2.通用查询日志

3.慢查询日志

4.二进制日志

二进制日志的管理



  • MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:
日志文件记入文件中的信息类型
错误日志记录启动、运行或停止时出现的问题
查询日志记录建立的客户端连接和执行的语句
二进制日志记录所有更改数据的语句。主要用于复制和即时点恢复
慢日志记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询
事务日志记录InnoDB等支持事务的存储引擎执行事务时产生的日志
  • 默认情况下,所有日志创建于mysqld数据目录中。通过刷新日志,你可以强制 mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,出现日志刷新。如果你正使用MySQL复制功能,从复制服务器将维护更多日志文件,被称为接替日志。

1.错误日志

  • 服务器启动和关闭过程中的信息
  • 服务器运行过程中的错误信息
  • 事件调度器运行一个时间是产生的信息
  • 在从服务器上启动从服务器进程是产生的信息

定义:

可以用--log-error[=file_name]选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。如果你执行FLUSH LOGS,错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。(如果未给出--log-error选项,则不会重新命名)。

  • 查看当前错误日志配置:
mysql> show global variables like '%log_error%';
  • 是否记录警告日志
mysql> SHOW GLOBAL VARIABLES LIKE '%log_warnings%';

2.通用查询日志

  • 启动开关:general_log={ON|OFF}
  • 日志文件变量:general_log_file[=/PATH/TO/file]
  • 全局日志开关:log={ON|OFF} 该开关打开后,所有日志都会被启用
  • 记录类型:log_output={TABLE|FILE|NONE}:

因此,要启用通用查询日志,需要至少配置general_log=ONlog_output={TABLE|FILE}。而general_log_file如果没有指定,默认名是host_name.log

看看上述几个值的默认配置:
SHOW GLOBAL VARIABLES LIKE '%general_log%';
mysql> SHOW GLOBAL VARIABLES LIKE '%log_output%';

3.慢查询日志

  • MySQL如果启用了slow_query_log=ON选项,就会记录执行时间超过long_query_time的查询(初使表锁定的时间不算作执行时间)。日志记录文件为slow_query_log_file[=file_name],如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。
默认与慢查询相关变量:
 
mysql> SHOW GLOBAL VARIABLES LIKE '%slow_query_log%';
  • 默认没有启用慢查询,为了服务器调优,建议开启
开启方法:
 
SET GLOBAL slow_query_log=ON; 当前生效,永久有效配置文件中设置
  • 使用mysqldumpslow命令获得日志中显示的查询摘要来处理慢查询日志
# mysqldumpslow slow.log
  • 那么多久算是慢呢?
如果查询时长超过 long_query_time 的定义值(默认 10 秒),即为慢查询:
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';

4.二进制日志

二进制日志启动开关:
log-bin [= file_name]
5 .6 及以上版本一定要手动指定。 5 .6 以下版本默认 file_name $datadir/mysqld- binlog
  • 查看二进制日志的工具为:mysqlbinlog

查看二进制日志是否开启:

mysql> show global variables like 'log_bin';

永久开启方式:

[root@localhost ~]# vim /etc/my.cnf
在[mysqld]下添加:
log_bin
server_id=36            //需要配置server_id,这里取ip地址后两位,注意不要重复

重启服务systemctl restart mysqld,进入mysql中。

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

二进制日志的管理

[root@localhost ~]# ls /var/lib/mysql            //可以看到存放日志的文件

我们可以给存放二进制日志的文件起名,与系统默认起名区分开来

日志滚动

  • 每次重启MySQL服务,日志都会自动滚动一次。
  • 另外如果需要手动滚动,则使用命令 mysql> FLUSH LOGS

在sql里刷新或输入指令,重启mysql服务之后,会看到新的日志文件

 

 

 

日志查看

  • 查看有哪些二进制日志文件:
mysql> SHOW BINARY LOGS;
  • 查看当前正在使用的是哪一个二进制日志文件:
mysql> SHOW MASTER STATUS;
  • 查看二进制日志内容:
mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002';     
//该语句还可以加上Position(位置),指定显示从哪个Position(位置)开始: 
mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002' FROM 203;
  • 使用命令mysqlbinlog查看二进制日志内容:
mysqlbinlog [options] log-files
  • 使用二进制日志还原数据:
使用 mysqlbinlog 读取需要的日志内容,使用标准输入重定向到一个 sql 文件,然后在 mysql 服务器上导入即可,如下:
[root@localhost mysql]# mysqlbinlog mysqld-binlog.000002 >/root/temp_date.sql

删除二进制日志文件

  • 二进制日志文件不能直接删除的,如果使用rm等命令直接删除日志文件,可能导致数据库的崩溃。
必须使用命令 PURGE 删除日志,语法如下:
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
mysql> purge binary logs to 'mysql-bin.000002';    //删除2号之前的日志文件
Query OK, 0 rows affected (0.01 sec)

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

purge master logs to 'filename.******' 命令可以删除指定编号前的所有日志
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值