MySql DDL日志_日志信息记录表|全方位认识 mysql 系统库

原标题:日志信息记录表|全方位认识 mysql 系统库

7057e26d510f72e8d7899bc4f23dad92.png

在上一期《复制信息记录表|全方位认识 mysql 系统库》中,我们详细介绍了mysql系统库中的复制信息记录表,本期我们将为大家带来系列第八篇《日志记录等混杂表|全方位认识 mysql 系统库》,下面请跟随我们一起开始 mysql 系统库的系统学习之旅吧!

日志信息记录表

01

1.1. 日志信息概述

MySQL的日志系统包含:general query log、slow query log、error log(记录MySQL Server启动时、运行中、停止时的错误信息)、binary log(记录MySQL Server运行过程中的数据变更的逻辑日志)、relay log(记录从库IO线程从主库获取的主库数据变更日志)、DDL log(记录DDL语句执行时的元数据变更信息。5.7中只支持写入到文件,8.0中支持写入到innodb_ddl_log表中,注意,ddl log与online ddl的alter log不同,不要搞混了),其中,在MySQL 5.7中,只有general query log、slow query log支持写入到表中(也支持写入到文件中),其他日志类型在MySQL 5.7版本中只支持写入到文件中,所以,下文中对于日志系统表主要介绍 general query log、slow query log表。

默认情况下,除Windows上的错误日志之外,其他平台的所有日志默认情况下不启用 (DDL日志只在需要时创建,并且无用户可配置选项)。

默认情况下,所有日志均写在datadir目录下,但可以使用每种日志对应的路径参数自行更改路径。

general query log:general_log_file=/home/mysql/data/mysqldata1/mydata/localhost.log

error log: log_error=/home/mysql/data/mysqldata1/log/error.log

slow query log:slow_query_log_file=/home/mysql/data/mysqldata1/slowlog/slow-query.log

binary log:log_bin_basename=/home/mysql/data/mysqldata1/binlog/mysql-bin、log_bin_index=/home/mysql/data/mysqldata1/binlog/mysql-bin.index

relay log:relay_log_basename=/home/mysql/data/mysqldata1/relaylog/mysql-relay-bin、relay_log_index=/home/mysql/data/mysqldata1/relaylog/mysql-relay-bin.index

默认情况下,所有的日志都写入到磁盘文件,但general query log和slow query log可以通过log_output=TABLE设置保存到表mysql.general_log和mysql.slow_log表中(DDL log在8.0中可以配置,可打印到错误日志中,也可以保存在表innodb_ddl_log中)。

默认情况下,binary log根据max_binlog_size参数设置的大小自动滚动、relay log根据max_relay_log_size或者max_binlog_size自动滚动(如果max_relay_log_size没设置就按照max_binlog_size大小滚动),其他的日志类型不会滚动,总是使用同一个文件,所以其他日志类型增长过大之后,需要自行做切割。

一般使用mv file file.bak;然后执行刷新命令,刷新命令可以登录实例使用flush logs命令刷新重新产生新的日志文件,但是该命令是刷新所有的日志类型,要针对具体的日志类型,可以使用:flush binary logs;刷新二进制日志、flush error logs;刷新错误日志、flush general logs;刷新普通查询日志、flush slow logs;刷新慢查询日志、flush relay logs;刷新中继日志、flush engine logs;刷新存储引擎相关的任何可刷新的日志。

也可以使用Server的flush tables;语句或者flush table with read lock;语句。

刷新操作也可以使用一些命令行工具的选项实现,例如:使用mysqladmin命令的flush-logs选项,或者mysqldump的flush-logs选项与--master-data选项。

日志表实现具有以下特征:

通常,日志表的主要目的是为程序提供一个访问接口,以便查看Server内的SQL运行情况,所以,日志记录存放在表中比存放在磁盘文件中会更加方便,因为存储在表中可以远程访问这些日志记录,而不需要登录操作系统去访问磁盘文件。

日志表可以使用CREATE TABLE,ALTER TABLE和DROP TABLE语句,但前提是需要先使用对应的开关关闭掉表,不能在使用期间操作(例如:set global general_log=0,然后操作general_log表)。

general_log和slow_log表默认是CSV引擎,使用逗号分割的格式来存放日志记录,CSV数据文件可以很方便地导入其他程序进行处理,例如:excel电子表格。

日志表可以修改引擎为MyISAM,但修改之前必须先停止表的使用。合法的引擎为CSV和MyISAM,其他引擎不支持。

要禁用日志记录表以便进行相应的DDL语句操作,可以使用以下步骤(以慢查询表为例进行说明,slow_log和general_log表操作方式类似)。

SET@old_log_state = @@ global.general_log;

SETGLOBALgeneral_log = 'OFF';

ALTERTABLEmysql.general_log ENGINE= MyISAM;

SETGLOBALgeneral_log = @old_log_state;

可以使用TRUNCATE TABLE来清空日志记录。

可以使用RENAME TABLE来实现日志表的归档,新旧表做一个原子的名称互换操作,如下:

usemysql;

DROPTABLEIFEXISTSgeneral_log2;

CREATETABLEgeneral_log2 LIKEgeneral_log;

RENAMETABLEgeneral_log TOgeneral_log_backup,general_log2 TOgeneral_log;

注意事项

可以使用CHECK TABLE语句。

不能使用LOCK TABLE语句。

不能使用INSERT,DELETE和UPDATE语句,日志表的记录变更由Server内部维护,不能手动操作。

FLUSH TABLES WITH READ LOCK和read_only系统变量的设置对日志表没有影响。Server内部始终可以写日志表。

日志表的数据变更操作不会记录到binlog,因此不会被复制到从库。

可以使用FLUSH TABLES或FLUSH LOGS语句来刷新日志表或日志文件。

日志表不支持分区表。

mysqldump转储包含了重新创建这些表的语句,以便在重新加载转储文件后恢复日志表结构,但是日志表中的记录内容不会被转储。

PS:MySQL的查询日志、错误日志等是使用明文记录的,所以,这些日志中有可能会记录用户的明文密码信息,可以使用rewrite插件来使用原始格式记录,详见链接:

https://dev.mysql.com/doc/refman/5.7/en/plugin-types.html#query-rewrite-plugin-type

https://dev.mysql.com/doc/refman/5.7/en/rewriter-query-rewrite- plugin.html

1.2. 日志表详解

1.2.1. general_log

该表提供查询普通SQL语句的执行记录信息,用于查找客户端到底在服务端上执行了什么SQL(当然,还可以使用企业版的audit log审计插件记录,本文不做赘述,有兴趣的童鞋自行研究)。

该表中的信息在SQL开始执行时就会进行记录,而不是等待SQL执行结束才记录。

root@localhost : (none) 07:25:50> set global log_output= 'TABLE';

Query OK, 0rows affected ( 0. 00sec)

root@localhost : (none) 07:26:20> set global general_log= 1;

Query OK, 0rows affected ( 0. 01sec)

root@localhost : (none) 07:26:32> select * from mysql.general_log;

+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+

| event_time |user_host | thread_id |server_id | command_type |argument |

+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+

| 2018- 06- 1919:26:32.891371| r

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值