我的MYSQL学习心得(十五) 日志

我的MYSQL学习心得(一) 简单语法

我的MYSQL学习心得(二) 数据类型宽度

我的MYSQL学习心得(三) 查看字段长度

我的MYSQL学习心得(四) 数据类型

我的MYSQL学习心得(五) 运算符

我的MYSQL学习心得(六) 函数

我的MYSQL学习心得(七) 查询

我的MYSQL学习心得(八) 插入 更新 删除

我的MYSQL学习心得(九) 索引

我的MYSQL学习心得(十) 自定义存储过程和函数

我的MYSQL学习心得(十一) 视图

我的MYSQL学习心得(十二) 触发器

我的MYSQL学习心得(十三) 权限管理

我的MYSQL学习心得(十四) 备份和恢复

我的MYSQL学习心得(十六) 优化

我的MYSQL学习心得(十七) 复制

这一篇《我的MYSQL学习心得(十五)》将会讲解MYSQL的日志

MYSQL里的日志主要分为4类,使用这些日志文件,可以查看MYSQL内部发生的事情。

分别是

1、错误日志:记录mysql服务的启动、运行、停止mysql服务时出现的问题

2、查询日志:记录建立的客户端连接和执行的语句

3、二进制日志:记录所有更改数据的语句,可以用于数据复制

4、慢查询日志:记录所有执行时间超过long_query_time的所有查询或不使用索引的查询

默认情况下,所有日志创建于mysql数据目录中。通过刷新日志,可以强制mysql关闭和重新打开日志文件(或者在某些情况下切换到

一个新的日志)。当执行一个FLUSH LOGS语句或执行mysqladmin flush-logs 或mysqladmin refresh 时,将刷新日志

如果使用mysql复制功能,在复制服务器上可以维护更多日志文件,这种日志称为接替日志

其他日志功能会降低mysql数据库的性能。例如,在查询非常频繁的mysql数据库系统中,如果开启了通用查询日志和慢查询日志,

mysql数据库会花费很多时间记录日志。同时,日志会占用大量的磁盘空间


二进制日志

二进制日志就是我们经常说的binlog,主要记录mysql数据库的变化。

二进制日志以一种有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。

二进制日志包含关于每个更新数据库的语句的执行时间信息。他不包含没有修改任何数据的语句,例如select语句

使用二进制日志的最大目的是最大可能地恢复数据库,因为二进制日志包含备份后进行的所有更新

1、启动和设置二进制日志

默认情况下,二进制日志是关闭的,可以通过修改mysql的配置文件来启动和设置二进制日志

my.ini中[mysqld]组下面有几个设置是关于二进制日志的:

log-bin[=PATH/[FILENAME]]
expire_logs_days
max_binlog_size=100M

log-bin定义开启二进制日志;path表明日志文件所在的目录路径;

filename指定了日志文件的名称,如文件的全名是filename.0001,filename.0002等

除了上述文件之外,还有一个成为filename.index的文件,文件内容为所有日志的清单,可以使用记事本打开该文件

filename.index文件的内容,joe是我的计算机名,当前只有一个binlog文件:.\joe-bin.000001

.\joe

expire_logs_days定义了mysql清除过期日志的时间,即二进制日志自动删除的天数。

默认值为0,表示“没有自动删除”。当mysql启动或刷新二进制日志时可能删除该文件

max_binlog_size定义了单个文件的大小限制,如果二进制日志写入的内容大小超出给定值,日志就会发生滚动

(关闭当前文件,重新打开一个新的日志文件)。不能将该变量设置为大于1GB或小于4096字节。默认值是1GB

如果正在使用大事务 ,二进制日志文件大小还可能超过max_binlog_size的定义大小。

在my.ini配置文件中的[mysqld]组下,添加以下几个参数与参数值

[mysqld]
log-bin
expire_logs_days
max_binlog_size=100M

添加完毕之后,关闭并重启mysql服务进程,即可打开二进制日志,然后可以通过SHOW VARIABLES语句来查询日志设置

使用show VARIABLES  语句查看日志设置

show VARIABLES  LIKE '%log_%';

可以看到log_bin为ON,max_binlog_size为104857600字节,换算为MB为100MB

MYSQL重新启动之后,就可以看到新产生的文件后缀为.000001和.index的两个文件,文件名称默认为主机名称

如果想改变日志文件的目录位置,可以修改my.ini中log-bin参数

例如:

[mysqld]
log-bin="D:\mysql\log\binlog"

关闭并重启mysql服务之后,新的二进制日志将出现在"D:\mysql\log\binlog"路径下

提示:数据库文件最好不要和日志文件放在同一个磁盘上,这样当数据库文件所在磁盘发生损坏的时候,可以使用日志来恢复数据

2、查看二进制日志

mysql二进制日志是经常用到的。当mysql创建二进制日志文件时,首先创建一个以filename为名称,以index为后缀的文件;

再创建一个以filename为名称,以“.000001”为后缀的文件。当mysql服务重新启动一次,以“.000001”为后缀的文件会增加一个,

并且后缀名加1递增;如果日志长度超过了max_binlog_size的上限(默认是1GB)也会创建一个新的日志文件

show binary logs语句可以查看当前二进制日志文件个数和文件名。mysql二进制日志并不能直接查看,如果要查看日志内容,

可以通过mysqlbinlog命令查看

使用show binary logs语句查看二进制日志文件个数和文件名

SHOW BINARY LOGS;

可以看到,当前有两个二进制日志文件,因为我把mysql服务重启了一次,日志文件的个数和mysql服务启动的次数相同。

每启动一次mysql服务,将会产生一个新的日志文件

使用mysqlbinlog查看二进制日志

mysqlbinlog是一个单独的exe,需要在命令行里执行我们把binlog文件里面的内容导出到binlog.txt

mysqlbinlog  "D:\Program Files (x86)\MySQL\MySQL Server5.\data\joe" >c:\binlog.txt
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at
#  :: server id   end_log_pos      Start: binlog v , server v   :: at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
ioTZUw8BAAAAZwAAAGsAAAABAAQANS41LjIwLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACKhNlTEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

3、删除二进制日志

mysql的二进制日志可以配置自动删除,同时mysql也提供了安全的手动删除二进制日志的方法

删除所有的二进制日志文件使用RESET MASTER;

RESET MASTER;

执行该语句,所有二进制日志将被删除,mysql 会重新创建二进制日志,新的日志文件扩展名将重新从000001开始编号

只删除部分二进制日志文件使用PURGE MASTER LOGS;

PURGE MASTER LOGS;

语法如下

PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

第一种方法指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件

第二种方法指定日期,执行该命令将删除指定日期以前的所有日志文件

使用PURGE MASTER LOGS;删除创建时间比binlog.000003早的所有日志文件

首先,为了演示语句操作过程,准备多个日志文件,读者可以对mysql服务进行多次重启

例如这里有10个日志文件

执行删除命令

 PURGE MASTER LOGS ";

执行完成后,使用 show BINARY logs; 查看二进制日志

可以看到joe-bin.000001和joe-bin.000002两个日志文件被删除了

使用 PURGE MASTER LOGS 删除2013年3月30日前创建的所有日志文件,执行命令如下

PURGE MASTER LOGS BEFORE '

执行完毕之后,2013年3月30日前的日志文件都被删除,但2013年3月30日的日志会被保留

4、查看二进制日志里的操作记录

show binlog events;

比如想查看某一个二进制日志里面的记录,但又不想用mysqlbinlog,可以使用show binlog events

比如我想查看'joe-bin.000006'这个binlog文件的内容,执行如下命令

show binlog events in 'joe-bin.000006';

内容如下

Log_name: joe
Pos:
Event_type: Query
Server_id:
End_log_pos:
Info: use `test`; insert into bin(name) values ('orange') 

可以看到'joe-bin.000006'这个binlog文件记录了哪些SQL命令

如果想知道binlog文件的创建时间,就需要mysqlbinlog工具来查看

C:\ProgramData\MySQL\MySQL Server
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at
# :: server id   end_log_pos    

其中131015为日志创建时间,即2013年10月15日

5、使用二进制日志还原数据库

如果mysql服务器启用了二进制日志,在数据库出现意外丢失数据时,可以使用mysqlbinlog工具从指定的时间点开始

(例如,最后一次备份)直到现在,或另外一个指定的时间点的日志中恢复数据

要想从二进制日志恢复数据,需要知道当前二进制日志文件的路径和文件名。一般可以从配置文件(即my.cnf或者my.ini,文件名取决于mysql

服务器的操作系统)中找到路径

mysqlbinlog恢复数据的语法如下:

mysqlbinlog [option] filename |mysql -uuser -ppass

option是一些可选项,filename是日志文件名

比较重要的两对option参数是

--start-datetime、--stop-datetime

--start-position、--stop--position

--start-date、--stop-date可以指定恢复数据库的起始时间点和结束时间点

--start-position、--stop--position可以指定恢复数据的开始位置和结束位置

使用mysqlbinlog恢复mysql数据库到2014年7月2日15:27:48时的状态,执行下面命令

mysqlbinlog --stop-datetime="2014-7-2 15:27:48 " D:\mysql\log\binlog\binlog.000008 |mysql -u user -p password

该命令执行成功后,会根据binlog.000008日志文件恢复2014年7月2日15:27:48前的所有操作。

这种方法对误操作的删除数据比较有效

6、暂时停止二进制日志

如果在mysql的配置文件配置启动了二进制日志,mysql会一直记录二进制日志,修改配置文件,可以停止二进制日志,

但是需要重启mysql数据库。mysql提供了暂时停止二进制日志的功能。通过 SET SQL_LOG_BIN 语句可以使mysql暂停或者启动二进制日志

语法如下

}

执行下面语句将暂停二进制日志

;

执行下面语句将恢复记录二进制日志

;

实际上,binlog文件有点类似于SQLSERVER的ldf文件,大家都保存了数据库的操作日志,都可以根据这个日志来恢复数据库

但是又有不同,mysql的binlog可用不开启,因为mysql的redo日志放在ib_logfile开头的文件里面,而undo日志跟数据文件是放在一起的

所以这一点跟SQLSERVER很不一样

在复制的时候,MYSQL一定要开启binlog功能,slave读取binlog,而SQLSERVER的订阅端读取发布端的ldf文件

所以刚才说:binlog文件有点类似于SQLSERVER的ldf文件


错误日志

错误日志文件包含了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。

在MYSQL中,错误日志也是非常重要的,mysql将启动和停止数据库信息以及一些错误信息记录到错误日志中

1、启动和设置错误日志

在默认情况下,错误日志会记录到数据库的数据目录下。如果没有在配置文件中指定文件名,则文件名默认为hostname.err。

例如:mysql所在服务器主机名为mysql-db,记录错误信息的文件名为mysql-db.err。如果执行了FLUSH LOGS,错误日志文件会重新加载

错误日志的启动和停止以及日志文件名,都可以通过修改my.ini(或者my.cnf)来配置。错误日志的配置项是log-error。

在[mysqld]下配置log-error,在启动错误日志。如果需要指定文件名,则配置项如下:

[mysqld]

log-error=[path/[file_name]]

path为日志文件所在的目录路径,filename为日志文件名。修改配置项后,需要重启mysql服务才生效

2、查看错误日志

通过错误日志可以监视系统的运行状态,便于及时发现故障,修复故障。mysql错误日志是以文本文件形式存储的,可以使用文本编辑器直接

查看mysql错误日志

如果不知道日志文件的存储路径,可以使用 show variables; 语句查看错误日志的存储路径。

语句如下

show variables LIKE 'log_error';

使用记事本查看mysql错误日志

通过上面 show variables LIKE 'log_error'; 的语句查看到错误日志的路径,然后用记事本打开该文件

我们可以看到错误日志内容如下

 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file E:\MYSQL DataBase\ibdata1 did not exist:
InnoDB: a new database to be created!
 ::  InnoDB: Setting  MB
InnoDB: Database physically writes the file full: wait...
 ::  InnoDB: Log file .\ib_logfile0 did not exist: new to be created
InnoDB: Setting  MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress
 ::  InnoDB: Log file .\ib_logfile1 did not exist: new to be created
InnoDB: Setting  MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB:  rollback segment(s) active.
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

 ::  events
 ::  InnoDB: Starting shutdown...
 ::  InnoDB:
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Shutdown complete

  :: [Note] Plugin 'FEDERATED' is disabled.
  :: InnoDB: The InnoDB memory heap is disabled
  :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
  :: InnoDB: Compressed tables
  :: InnoDB: Initializing buffer pool, size .0G
  :: InnoDB: Completed initialization of buffer pool
  :: InnoDB: highest supported file format is Barracuda.
  ::  InnoDB: Waiting for the background threads to start
  :: InnoDB:  started;
  ::  events
  :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

 ::  events
 ::  InnoDB: Starting shutdown...
 ::  InnoDB:
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Shutdown complete

 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
 :: InnoDB: highest supported file format is Barracuda.
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

 ::  events
 ::  InnoDB: Starting shutdown...
 ::  InnoDB:
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Shutdown complete

 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
 :: InnoDB: highest supported file format is Barracuda.
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
  :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

  ::  events
  ::  InnoDB: Starting shutdown...
 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
 :: InnoDB: highest supported file format is Barracuda.
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

 ::  events
 ::  InnoDB: Starting shutdown...
 ::  InnoDB:
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Shutdown complete

 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
 :: InnoDB: highest supported file format is Barracuda.
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
  :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

  ::  events
  ::  InnoDB: Starting shutdown...
 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
 :: InnoDB: highest supported file format is Barracuda.
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

 ::  events
 ::  InnoDB: Starting shutdown...
 ::  InnoDB:
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Shutdown complete

 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
 :: InnoDB: highest supported file format is Barracuda.
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Normal shutdown

 ::  events
 ::   user: 'root'

 ::  InnoDB: Starting shutdown...
 ::  InnoDB:
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: Shutdown complete

 :: [Warning] No argument was provided to --log-bin, and --log-bin-index was not used; so replication may break when this MySQL server acts as a master and has his hostname changed!! Please use '--log-bin=WIN7U-20130414Z-bin' to avoid this problem.
 :: [Note] Plugin 'FEDERATED' is disabled.
 :: InnoDB: The InnoDB memory heap is disabled
 :: InnoDB: Mutexes and rw_locks use Windows interlocked functions
 :: InnoDB: Compressed tables
 :: InnoDB: Initializing buffer pool, size .0G
 :: InnoDB: Completed initialization of buffer pool
 :: InnoDB: highest supported file format is Barracuda.
 ::  InnoDB: Waiting for the background threads to start
 :: InnoDB:  started;
 ::  events
 :: [Note] E:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld: ready for connections.
Version:   MySQL Community Server (GPL)

3、删除错误日志

mysql的错误日志以文本文件的形式存储在文件系统中,可以直接删除

对于mysql5.5.7以前的版本,flush logs可以将错误日志文件重命名为filename.err_old,

并创建新的日志文件。但是从mysql5.5.7开始,flush logs只是重新打开日志文件,并不做日志备份和创建的操作。

如果日志文件不存在,mysql启动或者执行flush logs时会创建新的日志文件

在运行状态下删除错误日志文件后,mysql并不会自动创建日志文件。flush logs在重新加载日志的时候,如果文件不存在,

则会自动创建。所以在删除错误日志之后,如果需要重建日志文件需要在服务器端执行以下命令:

mysqladmin -u root -p flush-logs

或者在客户端登录mysql数据库,执行flush logs语句

flush logs;

删除err文件,并用flush logs语句重建log-error文件

手动删除文件

手动执行 flush logs; ,err文件恢复了

打开err文件,里面什么都没有


通用查询日志

通用查询日志记录了mysql的所有用户操作,包括启动和关闭服务、执行查询和更新语句等

1、启动和设置通用查询日志

mysql服务器默认情况下并没有开启通用查询日志。如果需要通用查询日志,可以通过修改my.ini或my.cnf配置文件来

开启。在my.ini或my.cnf的[mysqld]组下加入log选项

形式如下

[mysqld]

log[=path/[filename]]

path为日志文件所在目录路径,filename为日志文件名。如果不指定目录和文件名,通用查询日志将默认存储在mysql数据目录中的

hostname.log文件中。hostname是mysql数据库的主机名

这里在[mysqld]下面增加选项log,后面不指定参数值

[mysqld]
log

2、查看通用查询日志

通用查询日志中记录了用的所有操作。通过查看通用查询日志,可以了解用户对mysql进行的操作。通用查询日志是

以文本文件形式存储在文件系统中的,可以使用文本编辑器直接打开通用日志文件进行查看,Windows下可以使用记事本

Linux下可以使用vim、gedit等

使用记事本查看mysql通用查询日志

文件内容如下

E:\Program Files\MySQL\MySQL Server -log (MySQL Community Server (GPL)). started with:
TCP Port: , Named Pipe: (null)
Time                 Id Command    Argument
 ::         Connect    root@localhost on
             Query    SHOW VARIABLES
             Query    SHOW WARNINGS
             Query    select timediff( curtime(), utc_time() )
             Query    SHOW COLLATION
             Query    SET NAMES utf8
             Query    SET character_set_results=NULL
             Query    SELECT * FROM `emp`
 ::         Query    SELECT * FROM `emp`
             Query    SELECT * FROM `emp`
 ::         Query    USE test;

SELECT * FROM `emp`
             Init DB    test

可以看到mysql启动信息和用户root连接服务器与执行查询语句的记录

3、删除通用查询日志

通用查询日志是以文本文件的形式存储在文件系统中的。通用查询日志记录用户的所有操作

因此在用户查询、更新频繁的情况下,通用查询日志会增长得很快。DBA可以定期删除比较早的通用日志,以节省磁盘空间

可以用直接删除日志文件的方式删除通用查询日志。要重新建立新的日志文件,可使用语句

mysqladmin -flush logs

直接删除log文件

执行 flush logs

log文件重新生成了


慢查询日志

慢查询日志是记录查询时长超过指定时间的日。慢查询日志主要用来记录执行时间较长的查询语句

通过慢查询日志,可以找出执行时间较长、执行效率较低的语句,然后进行优化

1、启动和设置慢查询日志

mysql中慢查询日志默认是关闭的,可以通过配置文件my.ini或my.cnf中的log-slow-queries选项打开,也可以在mysql服务

启动的时候使用--log--slow-queries[=file_name]启动慢查询日志。启动慢查询日志时,需要在my.ini或者my.cnf文件中

配置long_query_time选项指定记录阀值,如果某条查询语句的查询时间超过了这个值,这个查询过程将被记录到慢查询日志

文件中。

在my.ini或者my.cnf文件中开启慢查询日志的配置如下:

[mysqld]

log-slow-queries[=path/[filename]]
long_query_time=n

path为日志文件所在目录路径,filename为日志文件名。如果不指定目录和文件名称,默认存储在数据目录中

文件名为hostname-slow.log,hostname是mysql服务器的主机名。参数n是时间值,单位是秒。

如果没有设置long-query_time选项,默认时间为10秒

开启慢查询日志

[mysqld]
log-slow-queries
long_query_time

2、查看慢查询日志

mysql的慢查询日志是以文本形式存储的,可以直接使用文本编辑器查看。在慢查询日志中,记录着执行时间较长的查询语句,

用户可以从慢查询日志中获取执行效率较低的查询语句,为查询优化提供重要的依据

查看慢查询日志的一些参数

show variables like '%slow%';

查看慢查询日志文件里的内容,使用文本编辑器打开数据目录下的WIN7U-20130414Z-slow.log文件

E:\Program Files\MySQL\MySQL Server -log (MySQL Community Server (GPL)). started with:
TCP Port: , Named Pipe: (null)
Time                 Id Command    Argument
# Time:   ::
# User@Host: root[root] @ localhost [::1]
# Query_time:   Rows_examined:
use test;
;
,PASSWORD ('newpwd'));

可以看到这里记录了一条慢查询日志。执行该条语句的帐户是root @ localhost

查询时间是Query_time: 7.578125秒

查询语句是 ,PASSWORD ('newpwd'));

该语句查询时间大大超过了设置值1秒,因此被记录在慢查询日志文件中

BENCHMARK函数简介:http://database.51cto.com/art/201010/229366.htm

3、删除慢查询日志

和通用查询日志一样,慢查询日志也可以直接删除。删除后在不重启服务器的情况下,需要执行

mysqladmin -u root -p flush logs

重新生成日志文件,或者在客户端登录到服务器执行 flush logs; 语句重建日志文件

官方mysql的慢查询日志在这里有一个缺陷,就是查询阀值只能是1秒或以上,如果要设置一秒以下就无能为力了

这时候如果想找出1秒以下的慢查询SQL,可以使用percona提供的microslow-patch来突破限制,将慢查询时间阀值减小到毫秒级别


平时应打开哪些日志

日志既会影响mysql的性能,又会占用大量磁盘空间。因此,如果不必要,应尽可能少地开启日志。

根据不同的使用环境,考虑开启不同的日志。

例如开发环境中优化查询效率低的语句,可以开启慢查询日志,或者生产环境中发现某些SQL执行特别慢也可以开启

如果磁盘空间不是特充足可以在高峰期间开启,在捕获到查询慢的SQL之后再关闭慢查询日志

如果需要搭建复制环境,那么就一定要开启二进制日志,如果数据特别重要也建议开启二进制日志,以便数据库损坏的时候也可以通过二进制日志

挽救一部分数据

通用日志无论在哪种情况下,一般不建议开启


总结

本文简单的阐述了MYSQL的日志面的内容,MYSQL的日志系统还是比较完善的,希望这篇文章对大家有帮助

如有不对的地方,欢迎大家拍砖o(∩_∩)o 

2014-11-27补充 写事务日志流程

本文版权归作者所有,未经作者同意不得转载。

我的MYSQL学习心得(十五) 日志的更多相关文章

  1. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  2. 我的MYSQL学习心得(五)

    原文:我的MYSQL学习心得(五) 我的MYSQL学习心得(五) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...

  3. MySQL学习笔记十五:优化(2)

    一.数据库性能评测关键指标 1.IOPS:每秒处理的IO请求次数,这跟磁盘硬件相关,DBA不能左右,但推荐使用SSD. 2.QPS:每秒查询次数,可以使用show status或mysqladmin ...

  4. MySQL学习笔记十:日志管理

    1.错误日志文件 MySQL的错误日志文件记录错误信息,还会记录mysqld进程的关闭和启动的信息,但也不是什么错误信息都会记录,只记录mysqld进程运行过程中发生的关键性错误. 错误日志的启动,可 ...

  5. 别人的的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  6. 我的MYSQL学习心得(十) 自定义存储过程和函数

    我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...

  7. 我的MYSQL学习心得(十二) 触发器

    我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...

  8. 我的MYSQL学习心得(十四) 备份和恢复

    我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...

  9. 我的MYSQL学习心得(十六) 优化

    我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

随机推荐

  1. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

  2. C++中的命名空间

    一,命名空间(namespace)的基本概念以及由来 1.什么是标识符: 在C++中,标识符可以是基本的变量,类,对象,结构体,函数,枚举,宏等. 2.什么是命名空间: 所谓的命名空间是指标识符的可见 ...

  3. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...

  4. PAT练习题目录

    点题号就能查看题解了,另外代码也放在了开源中国码云上: 甲级:代码集合:https://git.oschina.net/firstmiki/PAT-Advanced-Level-Practise 10 ...

  5. H3 BPM:为石化企业提供一个不一样的全停大修平台

    H3 BPM大型炼化企业装置全停检修管理平台(简称"全停大修")结合国际化的流程管理理念.成熟的系统技术架构.优秀的行业解决方案,为石油化工行业全停大修提供了卓越的信息化管理方案, ...

  6. Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

    昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...

  7. 深入理解 Android 之 View 的绘制流程

    概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...

  8. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

  9. hive

    Hive Documentation https://cwiki.apache.org/confluence/display/Hive/Home 2016-12-22  14:52:41 ANTLR  ...

  10. #ifndef

    关于c的#ifndef条件编译: 1)最好把头文件的内容都放在#ifndef和#endif中 2)一般格式: #ifndef <标识> #define <标识> ...... ...