对于MySQL的一般查询日志和慢查询日志,任何一个

作者: www.9159.com  发布:2019-11-22

  不管是general_log或者是slow_log,对应的SQL语句都是二进制格式的,需要使用convert(sql_text using UTF8)做一个转换,才变得具有可读性。

(12)刷新日志表和日志文件,分别使用 flush tables 和 flush logs.

5.2.4.1 binary log日志记录方式

binary log格式体现在变量binlog_format中有3方式:

1.语句模式(--binlog-format=STATEMENT),记录发送的语句。(默认)

2.行模式(--binlog-format=ROW),记录发生修改的行。

3.混合模式(--binlog-format=MIXED),即混合了语句模式和行模式

如果复制是基于语句模式的binary log会发送非确定性的语句,导致master和slave出现不一致性。mysql会保证语句是否可以复制到slave的一致性,如果保证不了会有一个警告:

 Statement may not be safe to log in statement format.

日志记录文件:slow_query_log_file [= file_name ]

 

如果只启用日志选项(没启用FILE目的地),服务打开对应的日志文件并写入启动信息到日志文件;然而,查询记录不会写入到文件,除非FILE目的地被选中。

5.2.1 选择General query log和slow query log 的输出方式

general query log 和 slow query log的输出方式为文件或者表(slow_log,general_log),写入表比写入文件负荷要高,可以使用—log-output命令行参数或者log-output变量。

log-output取值有3个:.FILE,存到文件中,.TABLE,存到表中,.NONE,不存,默认为FILE。

 

general_log:设置是否启动general log和slow_query_log 类似

general_log_file指定输出文件和slow_query_log_file类似

 

任意日志启动后,都会在日志文件上写入服务启动信息,但是后续的数据是否写入到日志文件中由log-output决定。

另外sql_log_off控制所在session生成的sql是否写入到general log。

 

日志数据写入到表的好处:

1.一个标准的格式(格式固定)

2.可以通过sql 访问日志数据

3.可以远程访问

 

日志表实现有一下几个特点:

1.日志表是为了看如何运行,而不是为了干涉运行

2.create table,alter table,drop table 可以应用在日志表上,alter table和drop table 会堵塞日志表。

3.默认日志表示CSV的,如果要换成myisam要先停止日志。

4.停止日志之后就可以alter table 或者drop table

5.可以truncate table 日志表

6.可以rename table 日志表

7.可以check table 日志表

8.lock table不能使用

9.insert,delete,update不能操作

10.flush tables with read lock或者read_only变量无效。

11.日志表上的更改不会写入binary log,不能用于复制

12.刷新日志表或日志文件分别使用 FLUSH TABLES或者FLUSH LOGS

13.不能使用表分区

14.在5.6.6之前不能mysqldump导出日志表,As of 5.6.6, the dump includes statements to recreate those tables so that they are not missing after reloading the dump file. Log table contents are not dumped.(测试之后 5.6.19可以用mysqldump,需要加--skip-lock-tables,10.0.10-MariaDB-log也一样。)

 

mysql> show global variables like '%slow_query_log%';

 

(3) 默认,日志表使用CSV存储引擎,以逗号分割的格式写入数据。对于能够访问包含日志表数据的.csv文件的用户,这些文件可以方便地导入进其他程序,比如电子表格(能够处理CSV输入)。

5.2.5 Slow Query Log

slow log包括,执行时间超过 long_query_time并且至少请求min_examined_row_limit条记录。

 

执行时间并不包含初始化表锁的时间,mysqld会在执行完并且释放锁之后写入到日志。所以日志上的顺序和执行顺序不同。

 

默认slow query log 是不启动的,可以通过—slow_query_log设置,通过—slow_query_log_file来设置日志文件所在位置。--log_output来设置输出方式。如果没有指定shlow_query_log_file默认为host_name-slow.log。

 

若日志启动会写入到log。若启动设置了文件方向,才会把后续的内容写到日志文件中,否则写入到表中。

 

如果设置了—log-short-format会尽量减少写入的日志信息。若要把管理性的语句写入到日志文件,需要启动—log-slow-admin-statements。

 

log_queries_not_using_indexes控制把没有使用索引的查询写入到日志。

log_throttle_queries_not_using_indexes是为了减少slow query log增长太快,每60s为一个区间,在区间内发送了log_throttle_queries_not_using_indexes个没有使用索引的语句写入到日志文件。

 

1.如果是非管理性语句或者log-slow-admin-statements=1

2.long_query_time或者log_queries_not_using_indexes符合

3.至少要达到请求min_examined_row_limit行

4.不在log_throttle_queries_not_using_indexes限制返回内的sql

图片 1

slave不写slow query log,除非启动了—log-slow-slave-statement。

注:

log_throttle_queries_not_using_indexes,只会对没有使用索引的sql处理。

常用options(类似字节偏移数):

直接rm掉general log&slow query log 并没有实际删除文件,磁盘空间也不会释放。mysql进程会继续持有,并且持续往里写数据。lsof看一下就知道了

为当前会话开启或禁用日志,可以设置sql_log_off变量来控制启用ON和禁用OFF

查看mysql数据库

密码错了  

Reference Manual] 5 MySQL 服务管理,referencemanual 5. MySQL 服务管理 5. MySQL 服务管理 ... 1 5.1 The Mysql Server 1 5.2 Mysql 服务日志 ... 1 5.2.1 选择Ge...

——>  二进制日志文件

  无法直接删除,如果直接删除的话,会出现“ERROR 1556 (HY000): You can't use locks with log tables.”的错误提示

(5) 为了修改或删掉日志表而禁用日志,你可以使用如下策略

5.2.4.2设置binary log格式

可以使用命令行参数—binlog-format=type设置,type有3个值:STATEMENT(默认),ROW,MIXED。适用范围是:global,session。

Command-Line Format

--binlog-format=format

Option-File Format

binlog-format

System Variable Name

binlog_format

Variable Scope

Global, Session

Dynamic Variable

Yes

 

Permitted Values

Type

enumeration

Default

STATEMENT

Valid Values

ROW

STATEMENT

MIXED

 

修改binlog_format的值必须要有 SUPER 权限。

 

当发生服务是运行在STATEMENT或者MIXED模式下,但是写入日志使用了ROW的日志方式。这个事件在slave中会被临时切换到ROW模式。

 

session变量设置原因:

1.session,修改只影响了很少的行,可以使用ROW

2.session,修改影响了很多行,使用STATEMENT

3.session,在master上执行时间很差,但是只修了一些行,可以使用ROW

一下情况下不能切换复制模式(切换会报错):

1.在存储过程或者触发器内

2.使用了NDBCLUSTER存储引擎

3.session在ROW复制模式(replication format,我认为是和binary log模式一样的东西)下,并且已经打开了临时表

当存在临时表的时候建议不要修改复制方式,因为临时表只有在语句模式下才会被记录。

 

在binary log模式为ROW情况下很多修改都是以行方式记录,但是DDL都是以语句方式记录。

 

--binlog-row-event-max-size选项,应用在有基于行的复制下,行保存的大小不能超过这个选项的大小。这个值必须是256的倍数,默认是1024。

———–>  1:每事务同步,并执行磁盘flush操作;

注意:当对应的文件是存在的时候,上述命名执行之后是没有影响的(也不会清理对应的日志文件)

(14) mysqldump 备份重建表语句,所以在加载dump文件后日志表不会丢失,但日志表内容不会备份。

谁有MySQL 50 中文帮助手册??? CHM格式的

我有,到www.baidu.com里面搜!  

启动慢查日志 : slow_query_log

当输出目标为表的时候对性能的影响

USE mysql;
DROP TABLE IF EXISTS general_log2;
CREATE TABLE general_log2 LIKE general_log;
RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;

5.4.1 mysqld DTrace Probe 说明

mysql DTrace 提供了一下事件(probe):

Group

Probes

Connection

connection-startconnection-done

Command

command-startcommand-done

Query

query-startquery-done

Query Parsing

query-parse-startquery-parse-done

Query Cache

query-cache-hitquery-cache-miss

Query Execution

query-exec-startquery-exec-done

Row Level

insert-row-startinsert-row-done

 

update-row-startupdate-row-done

 

delete-row-startdelete-row-done

Row Reads

read-row-startread-row-done

Index Reads

index-read-row-startindex-read-row-done

Lock

handler-rdlock-starthandler-rdlock-done

 

handler-wrlock-starthandler-wrlock-done

 

handler-unlock-starthandler-unlock-done

Filesort

filesort-startfilesort-done

Statement

select-startselect-done

 

insert-startinsert-done

 

insert-select-startinsert-select-done

 

update-startupdate-done

 

multi-update-startmulti-update-done

 

delete-startdelete-done

 

multi-delete-startmulti-delete-done

Network

net-read-startnet-read-donenet-write-startnet-write-done

Keycache

keycache-read-startkeycache-read-blockkeycache-read-donekeycache-read-hitkeycache-read-misskeycache-write-startkeycache-write-block,keycache-write-done

 

二进制日志文件:

备注:

(2) 创建表 修改表 删掉表 可用在日志表,对于修改和删除表,该表不能是正在使用的,必须被禁用。

[MySQL Reference Manual] 5 MySQL 服务管理,referencemanual

mysql> set global general_log=1;

以下偏离主题

(13) 日志表不允许分区。

5.2.6 服务日志维护

对于binlog可以设置expire_logs_days自动过期binary log。如果有复制存在,设置的值不应该小余slave的延迟。也可以通过purge binary logs语句来手动清理日志。

 

通过flush logs手动让binary log启动一个新的日志文件。

 

日志刷新做一下动作:

1.如果启动了general log 或者show query log,服务会关闭当前文件并且重新打开。

2.如果bianry log启动了,服务会关闭binary log 文件并且打开一个新的binary log 文件。

3.如果启动了error log,那么会关闭文件并且重新打开。

若要新建文件可以先使用mv命令重命名,然后flush logs。

 

错误日志定义:


  将常规查询和慢查询只写入到日志表,使用--log-output=TABLE 选中表作为日志输出目的地,--general_log和--slow_query_log去开启这两个日志输出。

5.2.2 Error Log

error log中包含了从mysqld从启动到结束所有主要错误。一些平台下面,当mysqld挂了的时候,会把mysqld的堆栈dump到error log中。error log的位置由—log-error指定。若没有,那么默认使用host_name.err。可以使用flush logs来刷新error log。mysqld会关闭日志并重新打开。

 

如果要rename,先mv掉,然后flush logs。

shell> mv host_name.err host_name.err-old

shell> mysqladmin flush-logs

shell> mv host_name.err-old backup-directory

 

如果是使用mysqld_safe来启动的mysqld。异常退出,会写入通知到error log需要重启mysqld。

 

log-warnings等于1启动写入warning到error log,如果大于1,会把非法种植的连接和拒绝的访问写入到log-warnings。

错误日志一般有以上两个变量可以定义:

以general log为例,需要先关闭general_log,然后重命名general_log这个表,
图片 2 

(9) 锁住表不能用在日志表上,插入删除更新也不能用在日志表。这些操作只能被服务内部执行。

5.2 Mysql 服务日志

Mysql有5类日志:

error log:mysql执行时的一些信息(和mssql的错误日志类似)

General query log:从客户端上过来的语句和连接

Binary log:修改数据库的日志(类似mssql的事务日志)

Relay log:从复制的master服务器传过来的日志

Slow query log:查询超过long_query_time的查询

 

默认是不启动什么日志的。并且默认当日志启动的时候,都是放在数据文件夹下。日志的刷新使用命令FLUSH LOGS当然还有别的比如通过mysqladmin,mysqldump等。当binary log超过max_bing_size的时候,也会自动刷新日志。刷新日志是关闭现在的日志并重新打开。

 

可以在运行时设置general query log 和slow query log,可以在服务启动的状态下,启动关闭,配置日志路径。

1.错误日志:记录启动、运行或停止时出现的问题,一般也会记录警告日志

  如果对重命名之后的表(general_log或者是slow_log)没有再次重命名回来,会发生什么?
  参加如下截图,如果没有找到对应的表(general_log或者是slow_log),在输出目标为表的情况下,会提示无法找到对应的表,将无法开启对应的日志

 

5.4 使用DTrace跟踪mysqld

DTrace在mysql中被用来提供mysql执行查询的信息,在执行过程中不同区域系统的使用。

DTrace可以跟着从连接到查询执行然后返回的全部过程。

图片 3

可以使用以下命令开启general_log:

  图片 4

全局变量general_log_file slow_query_log_file 指示常规查询和慢查询的文件名称,可以在服务启动或者运行时设置这些变量来改变日志文件的名称。

5.1 The Mysql Server

事务性存储引擎用于保证(ACID)原子性、一致性、隔离性和持久性;其不会立即写到数据文件中,而是写到事务日志中。

 

  将常规查询写到日志表和日志文件,使用 --log-output=TABLE,FILE 选中这两个目的地 使用--general_log启用常规查询日志;

5.2.3 General Query Log

general query log记录了mysqld需要做些什么。当想要知道客户端发送什么到mysqld 的时候这个日志非常有用。mysqld根据收到语句的顺序写入到日志中。和bin log不同,bin log是在语句执行完成,但是锁释放前(提交前)写入bin log的。

 

默认general log是关闭的,可以设置general-log变量或者—general-log命令行配置。

使用—general_log_file指定日志路径,使用—log-output指定日志输出方式。

 

如果的日志名为host_name.log。设计到general log的日志都有对应的变量可以设置。

服务重启或者flush logs并不会引起创建一个新的general log,如果要创建一个新的,应该先mv,然后flush logs。

shell> mv host_name.log host_name-old.log

shell> mysqladmin flush-logs

shell> mv host_name-old.log backup-directory

变量sql_log_off可以设置session级别的是否写入general log。

mysql> show global variables like 'general_log';

1,当输出目标为表的时候

2.运行时控制日志输出

5. MySQL 服务管理

  1. MySQL 服务管理... 1

5.1 The Mysql Server1

5.2 Mysql 服务日志... 1

5.2.1 选择General query log和slow query log 的输出方式... 1

5.2.2 Error Log. 1

5.2.3 General Query Log. 1

5.2.4 Binary Log. 1

5.2.4.1 binary log日志记录方式... 1

5.2.4.2设置binary log格式... 1

5.2.4.3混合binary log模式... 1

5.2.4.4 mysql数据库的log format1

5.2.5 Slow Query Log. 1

5.2.6 服务日志维护... 1

5.3 一个设备运行多个实例... 1

5.4 使用DTrace跟踪mysqld.. 1

5.4.1 mysqld DTrace Probe 说明... 1

 

二进制日志的格式:

压力大的情况下 大概30-% 性能损耗

(7)重命名表是可行的,你可以原子性地重命名表,比如

5.2.4.3混合binary log模式

如果使用混合模式,在以下条件下,会把 statement-base切换为row-base:

Ÿ   当一个包含函数UUID()

Ÿ   当一个或者多个表有auto-increment列被更新,并且触发器或者存储方法被调用。

Ÿ   调用了视图,视图体的语句需要row-base。

Ÿ   调用了UDF,用户自定义函数。

Ÿ   非事务表上执行了INSERT DELAYED。

Ÿ   如果会话使用了临时表,那么之后都会以row-base保存。

Ÿ   当FOUND_ROWS()或者ROW_COUNT()函数被使用的时候。

Ÿ   当USER(),CURRENT_USER(),CURRENT_USER被使用的时候。

Ÿ   当语句使用了系统变量的时候。

一下系统变量,在session级别使用,不会影响日志模式的切换:

Ÿ   auto_increment_increment

Ÿ   auto_increment_offset

Ÿ   character_set_client

Ÿ   character_set_connection

Ÿ   character_set_database

Ÿ   character_set_server

Ÿ   collation_connection

Ÿ   collation_database

Ÿ   collation_server

Ÿ   foreign_key_checks

Ÿ   identity

Ÿ   last_insert_id

Ÿ   lc_time_names

Ÿ   pseudo_thread_id

Ÿ   sql_auto_is_null

Ÿ   time_zone

Ÿ   timestamp

Ÿ   unique_checks

 

存储引擎,binary log模式支持情况。

Storage Engine

Row Logging Supported

Statement Logging Supported

ARCHIVE

Yes

Yes

BLACKHOLE

Yes

Yes

CSV

Yes

Yes

EXAMPLE

Yes

No

FEDERATED

Yes

Yes

HEAP

Yes

Yes

InnoDB

Yes

Yes when the transaction isolation level is REPEATABLE READ orSERIALIZABLE; No otherwise.

MyISAM

Yes

Yes

MERGE

Yes

Yes

NDB

Yes

No

 

一个语句会被以什么模式记录,取决于:1.语句本身,2.log_format,3.存储引擎。

1.binlog-format=mixed,语句本身unsafe,就要求ROW方式写入,如果语句本row injection要求ROW方式写入。

2.当语句,binlog-format,引擎支持,任意之间出现冲突这无法写入error。

具体表格查看:

mysql> show global variables like'general_log_file';

如何清理历史general log&slow query log

相似的是,slow_query_log控制输出慢查询日志到已选择的目的地,设置slow_query_log_file来制定慢查询日志的文件名称;

5.2.4.4 mysql数据库的log format

mysql上面的数据可能会通过DML语句直接修改,也可能通过DDL语句修改。

DML:DML语句对mysql数据库的修改,会依据binlog_format来。

DDL:DDL语句对mysql数据库修改,会以语句方式,不会理睬binlog_format。

 

MySQL如果启用了slow_query_log=ON选项,就会记录执行时间超过long_query_time的查询(初使表锁定的时间不算作执行时间)。日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。

对于MySQL的一般查询日志和慢查询日志,开启比较简单,其中公用的一个参数是log_output,log_output控制着慢查询和一般查询日志的输出方向
可以是表(mysql.general_log,mysql.slow_log)或者文件(有参数general_log_file和slow_query_log_file配置决定)
或者同时输出到表和文件(想不明白,什么时候需要同时输出到表和文件)。
但是两者受log_output参数影响,输出的目标总是一致的,也就是要么都写入表,或者要么都写入文件,不会一个输出到表,一个输出到文件。

general_log 系统变量控制常规日志输出到已选择的目的地。如果在启动时指定general_log,general_log的可选值1或0来启用或禁用日志;如需要指定日志文件的名称,可设置general_log_file变量。

5.2.4 Binary Log

Binary Log其实是数据修改的“事件”的日志。binary log主要有2个目的:

1.用于复制,master上的binary log发送给slave服务。

2.数据恢复操作需要用到binary log。

binary log不记录select或者show语句。

开启binary log会让性能稍微降低。

 

启动binary log可以设置命令行配置—log-bin[=base_name]默认名称为,pid-file选项的名称。pid-file选项默认为设备的host,然后加上-bin。如果在指定log-bin的时候加了后缀,那么会被自动忽略。

 

每次flush logs的时候,会重新创建一个新的日志文件。binlog文件超过了max_binlog_size的时候,也会重新创建一个新的日志文件。当出现大事务的时候,因为一个事务要放在一个binlog上,所以也可能出现大于max_binlog_size。

 

所有的binary log被记录在binary log index文件里面,这个文件可以由—log-bin-index修改。默认为bin_log.index。最好不要手动去修改,会让mysqld产生混乱。

如果客户端有SUPER权限,可以通过set sql_log_bin=0来禁止该session的语句写入到binary log。

 

binary log默认在写入日志的时候,服务会写入“事件”长度。然后在读取binary log的时候会根据长度来验证binary log。

 

可以使用binlog-checksum变量来指定bin log 写入checksum,在读的时候使用master_verify_checksum来指定使用使用checksum验证。slave i/o线程也可以使用chunksum来验证relay log过来的日志,slave_sql_verify_checksum。

 

“事件”被记录在binary log的时候有2中模式:1.行模式,2.语句模式。

 

--binlog-do-db和--binlog-ignore-db来忽略对某些db的binary log和—replicate-do-db,--replicate-ignore-db类似。

 

slave服务一般不把数据修改写入到binary log中,只有启动了—log-slave-update和—log-bin之后才会写入,一般用来做复制链

 

可以使用RESET MASTER或者PURGE BINARY LOGS来清空binary log。如果有复制那么句不应该在没有恢复完之前删除binary log。

 

binary log 的内容可以通过mysqlbinlog工具查看里面的内容。

 

binary log的写入是语句执行完之后,在释放锁之前(提交前)写入。没事务性表,会在执行完之后马上插入到binary log。

 

若是未提交事务,所有的写入事务表都会被缓存,直到接收commit,这个时候写入到binary log,然后再执行commit。

 

非事务表是不能回滚的,所以当一个事务如果包含了非事务性表的操作,回滚的时候,会在binary log上 ROLLBACK,这样非事务性表的修改就能够被复制。

 

binlog_cache_szie用来缓存binlog,如果操作会使用临时文件保存。

 

binlog_cache_use状态变量,显示了缓存的事务个数。binlog_cache_disk_use状态变量显示了缓存的事务存在临时文件的个数。可以使用上面2个状态变量来调整binlog_cache_size。

 

max_binlog_cache_size系统变量(默认4gb)可以用来限制所有缓存事务的大小。如果一个事务超过了这个值,就会报错回滚。最小值为4096。

 

默认binary log不是同步写入到磁盘的,如果系统或者设备crash,可能会照成binary log数据丢失。可以通过sync_binlog来控制经过N个写入之后,然后写入到磁盘。sync_binlog为1的时候最安全,但是也是最慢的。而且不能保证不丢失数据,当在发出commit命令后,写入binary log然后提交事务,如果出现在 写入binary log 和提交事务之间。那么事务会被回滚,但是还是会存在在binary log内。可以使用—innodb_support_xa来保证事务一致性。但是发布于支持XA事务的innodb。

 

该选项提供了更高的安全性,mysql服务也要同步的写入binlog,并且在innodb上提交事务前要写入日志到磁盘。innodb日志默认是同步的,sync_binlog=1也可以用来同步binary log。该选项主要是在crash restart的时候,如果回滚会剪切binary log中的innodb事务,这样就保证了slave和master的一致性。

 

如果mysql服务crash restart,发现binary log比预期的要短,就会出错:

The binary log file_name is shorter than its expected size.

 

以下session value会被写入到binary log,被应用在slave解析binary log阶段:

·  sql_mode (except that the NO_DIR_IN_CREATE mode is not replicated; see Section 17.4.1.34, “Replication and Variables”)

·  foreign_key_checks

·  unique_checks

·  character_set_client

·  collation_connection

·  collation_database

·  collation_server

·  sql_auto_is_null

———–>  0: 每秒同步,并执行磁盘flush操作;

  据个人测试,在请求量不大的数据库上,开启general_log或者是slow_log,对性能影响并没有非常明显。
  理论家们一方面强调说MySQL的处理并发上多强悍,一方面又说开启general_log对性能影响很大,会不会自相矛盾呢?
  关于general_log,在zabbix监控下,测试环境TPS不过百的情况下(每秒写入general log不超过100条数据),开启general_log之后并CPU负载几乎没有变化,CPU高点是在做其他压力测试。
  尤其是slow_log这种写入不是太频繁的日志,直接写入到表中,对性能的影响有限,比后面再去花时间解析文件……  
  当然不排除TPS在上千或者上万甚至更高之后,开启general_log会产生较大的影响,当然没事也不会闲的蛋疼去开general_log。

(1) 日志具有标准的格式。要查看当前日志表的结构,可以使用 show create table mysql.general_log; show create table mysql.slow_log;

5.3 一个设备运行多个实例

mysql> show binary logs;             ####查看所有的二进制文件

对于上述两种日志,系统默认不会清理,因此在开启了相关日志之后,需要人为清理。

 2.1 查看日志输出目的地

二进制日志事件:

2,当输出目标为文件的时候

(10) flush tables with read lock 和 read only 系统变量对于日志表没有影响,服务器可以随时写入日志表。

记录类型:log_output={TABLE|FILE|NONE}

--slow log 相关参数
select * 
from performance_schema.global_variables 
where variable_name in
('slow_query_log','log_output','slow_query_log_file','long_query_time')

--general log 相关参数
select * 
from performance_schema.global_variables 
where variable_name in
('general_log','log_output','general_log_file')

(8) 检查表(check table)也是可行的

基本语法:

  图片 5

2.3 日志表有以下特点

MySQL的滚动方式与其他日志不太一样,滚动时会创建一个新的编号大1的日志用于记录最新的日志,而原日志名字不会被改变。每次重启MySQL服务,日志都会自动滚动一次。

图片 6

(11) 日志表记录不被写入二进制日志,也不会备份到从服务器。

——>  相对位置:position

在对重命名之后的表执行删除,最后在重命名回来,最后开启general_log(如果有必要的话)

  1. 服务启动时控制日志

mysql> show global variables like 'log_error';

 

(4) 日志表可以改为使用MyISAM存储引擎,但不能修改正在使用的日志表。首先要把日志表禁用才行。除了CSV和MyISAM这两个存储引擎,其他都不可以作为日志表的存储引擎。

mysql> show global variables like 'log_warnings';

general log&slow query log

mysql> show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set

--start-position     :开始位置

图片 7

全局系统变量log_output 表示当前的日志输出目的地,这个可以在运行时修改来改变日志输出目的地

由于基于语句和基于行的日志格式都有自己的好处,MySQL使用的二进制日志文件是混合方式的二进制日志,内置策略会自动选择最佳的格式。

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
DELETE FROM general_log_temp WHERE event_time < DATE(NOW());
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';


--slow log 同理
SET GLOBAL slow_query_log = 'OFF';
RENAME TABLE slow_log TO slow_log_temp;
DELETE FROM slow_log_temp WHERE start_time < DATE(NOW());
RENAME TABLE slow_log_temp TO slow_log;
SET GLOBAL slow_query_log = 'ON';

翻译自 dev.mysql.com/doc/refman/5.7/en/log-destinations.html

错误日志主要记录如下几种日志:

 

例如:

--start-datetime 'yyyy-mm-dd hh:mm:ss'  :开始时间

  当输出目标为文件的时候,在linux下,直接使用rm命名删除即可,如果在开启了一般查询日志或者是慢查询日志,删除对应的日志文件,并不影响数据库的正常使用
  网上有说需要停止MySQL服务然后重命名文件然后在创建新的文件啥的,在Linux下并不是必须的,不知道在windows下是什么情况,没兴趣试。
  当然也不是说就建议始终这种暴力的方式清理日志文件,
  在Linux下,删除了默认的日志文件(或者重命名了原日志文件),要想再次生成日志文件
  1,可以使用mysqladmin flush-logs
  2,是SQL命令flush slow logs;flush general logs;
  3,重启MySQL服务
  均可重新生成对应的日志文件。

一、选择常规查询日志和慢查询输出日志的目的地

——>  基于行: row

图片 8

全局变量general_log  slow_query_log表示常规查询和慢查询已启用(ON)或禁用(OFF),你可以在运行时设置这些变量来控制日志是否启用。

错误日志文件:log_error

当输出目标为表的时候的解析

(6)在日志表上执行清空表(truncate table)是可行的。它可以用在清除过期日志记录。

二进制日志启动开关:log-bin [= file_name]

 

  而如果查询记录只写到日志文件,此时可以忽略掉--log-output=FILE这个默认选项。

日志的滚动:

--log-output指定了日志输出的目的地,这个选项本身不会启动日志目的地

全局日志开关:log={ON|OFF}   该开关打开后,所有日志都会被启用

[zheng@localhost ~]$ sudo /etc/rc.d/init.d/mysqld start --log-output=FILE,TABLE --general_log --slow_query_log
Starting MySQL. SUCCESS! 

4.二进制日志:任何引起或可能引起数据库变化的操作,主要用于备份和即时点恢复

(2) 日志内容可以通过SQL语句进行访问。这使得可以执行满足特定条件的日志选择查询。例如,搜索有关于特定客户端的查询内容(用来识别来自客户端的问题查询),这种方式比使用日志文件更加简单。

mysql> show global variables like 'innodb_flush_log_at_trx_commit';

SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
SET GLOBAL general_log = @old_log_state;

日志文件变量:general_log_file [ =/PATH/TO/file]

--log-output被忽略,则默认的日志目的地是FILE

启动慢查日志:log_slow_queries={YES|NO}

(3)日志可以被能够远程连接并发出查询客户端进行访问(如果客户端有合适的日志表权限),这样就没必要登录服务主机和直接访问文件系统。

--stop-position     :结束位置

这个日志输出的可选值是逗号分隔的一系列单词TABLE(记录进tables)、FILE记录进文件,NONE(都不写),如果NONE在其他值之前,其他值会被忽略、

使用命令mysqlbinlog查看二进制日志内容:

(1) 总的来说,日志表是首要目的是提供一个接口给用户来观察服务的运行,而不介入服务的运行时执行。

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

MySQL提供了灵活的控制对常规查询和慢查询的输出目的地,如果这些日志被启用,可能的目的地是日志文件或日志表general_log和slow_log(mysql 数据库),任何一个或全部的目的地都可以被选择。

在5.6及以上版本一定要手动指定。5.6以下版本默认file_name为$datadir/mysqld-binlog,二进制日志用于记录所有更改数据的语句,主要用于复制和即时点恢复。二进制日志的主要目的是在数据库存在故障时,恢复时能够最大可能地更新数据库(即时点恢复),因为二进制日志包含备份后进行的所有更新,二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。

 2.2将日志输出到表有以下好处

mysql> flush logs;

innodb_flush_log_at_trx_commit:

——>  索引文件

———–> 服务器运行过程中的错误信息

6,事务日志

启用警告信息:log_warnings (默认启用)

——>  基于语句: statement

查看mysql日志:

**3、慢查询日志
**

5.中继日志:复制主服务器的二进制日志,并保存为日志文件

mysql日志文件分为6种:

在数据目录下有一个mysql-bin.index便是索引文件,以mysql-bin开头并以数字结尾的文件为二进制日志文件。

1,错误日志

查询超时时间:long_query_time

mysql> show master status;         ####查看当前正在使用的二进制文件

———–> 事件调度器运行一个事件时产生的信息

log_output定义了日志的输出格式,可以是表,文件,若设置为NONE,则不启用日志,因此,要启用通用查询日志,需要至少配置general_log=ON,log_output={TABLE|FILE}。而general_log_file如果没有指定,默认名是host_name.log。由于一般查询使用量比较大,启用写入日志文件,服务器的I/O操作较多,会大大降低服务器的性能,所以默认为关闭的。

**4,二进制日志
**

mysql> show global variables like 'general_log';

2.一般查询日志:记录建立的客户端链接和执行的语句

——>  产生的时间:starttime

--stop-datetime 'yyyy-mm-dd hh:mm:ss'  :结束时间

———–>  2: 每事务同步,但不执行磁盘flush操作;

3.慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询,可以帮我们定位服务器性能问题

———–> 服务器启动和关闭过程中的信息

6.事务日志:记录InnoDB等支持事务的存储引擎执行事务时产生的日志

——>  混合方式: mixed

———–> 在从服务器上启动从服务器进程时产生的信息

启动开关:general_log={ON|OFF}

查看二进制日志的工具为:mysqlbinlog

mysqlbinlog [options] log-files

mysql> show global variables like '%log%';

本文由9159.com发布于www.9159.com,转载请注明出处:对于MySQL的一般查询日志和慢查询日志,任何一个

关键词: