Mysql 日志 (转)
MySQL日志: 主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;
错误日志
在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。
日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。
错误日志所记录的信息是可以通过log-error和log-warnings来定义的
log-err是定义是否启用错误日志的功能和错误日志的存储位置
log-warnings是定义是否将警告信息也定义至错误日志中
默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。
SHOW GLOBAL VARIABLES LIKE '%log%';
删除错误日志:
在mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,以保证mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令开启新的错误日志。mysqladmin命令的语法如下:mysqladmin –u root –pflush-logs也可以使用登录mysql数据库中使用FLUSHLOGS语句来开启新的错误日志。
在mysql5.5.7之后:服务器将关闭此项功能。只能使用重命名原来的错误日志文件,手动冲洗日志创建一个新的:方式如下:
[root@stu18 data]# mv stu18.magedu.com.err stu18.magedu.com.err.old
[root@stu18 data]# mysqladmin flush-logs
查询日志:
默认情况下查询日志是关闭的。由于查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。
查看查询日志是否开启:
|general_log | OFF #定义查询日志是否开启
|general_log_file | /mydata/data/stu18.log #定义查询日志的文件地址名称 慢查询日志:
慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。
查看慢查询日志的定义:
| slow_query_log | OFF #定义慢查询日志的
| slow_query_log_file |/mydata/data/stu18-slow.log #输出方式为file(文件)时定义慢查询日志的位置
启动和设置慢查询日志: 默认文件名为hostname-slow.log
1、通过配置文件my.cnf中的log-slow-queries选项可以开启慢查询日志;形式如下:
[root@stu18 data]# vim /etc/my.cnf
slow_query_log=1
log-slow-queries = /usr/local/mysql/data/ip-172-168-6-198-slow.log
2、执行mysql>set global slow_query_log=1;
时间默认超过多少的称为慢查询日志?一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:
SHOW GLOBAL VARIABLES LIKE 'long%';
注释:其中这个慢查询时间并不是只表示语句自身执行超过10秒还包含由于其他资源被征用造成阻塞的查询执行时间或其他原因等都被记录到慢查询中。所以这个慢查的时长表示从查询开始到查询结束中间包含可能的任何原因所经历的所有时间
show global variables like "%slow%";
事务日志:
事务日志(InnoDB特有的日志)可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。
如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。
查看事务日志的定义:
mysql> SHOWGLOBAL VARIABLES LIKE '%log%';+-----------------------------------------+-----------------------------------+| Variable_name | Value |+-----------------------------------------+-----------------------------------+| innodb_flush_log_at_trx_commit | 1 ||innodb_locks_unsafe_for_binlog | OFF || innodb_log_buffer_size | 8388608 ||innodb_log_file_size | 5242880 || innodb_log_files_in_group | 2 #至少有两个 ||innodb_log_group_home_dir |.#定义innodb事务日志组的位置 ||innodb_mirrored_log_groups | 1 #表示对日志组做镜像 |每个事务日志都是大小为5兆的文件:[root@stu18 data]#ls -lh-rw-rw---- 1 mysqlmysql 5.0M Oct 7 23:36 ib_logfile0-rw-rw---- 1 mysqlmysql 5.0M Aug 12 01:06 ib_logfile1 innodb_flush_log_at_trx_commit #在事务提交时innodb是否同步日志从缓冲到文件中1表示事务以提交就同步不提交每隔一秒同步一次,性能会很差造成大量的磁盘I/O;定义为2表示只有在事务提交时才会同步但是可能会丢失整个事务 二进制日志:
二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。一般大小体积上限为1G。
二进制开启状态:
mysql> showglobal variables like "%log_bin%";+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| log_bin | ON | #已开启|log_bin_trust_function_creators | OFF || sql_log_bin | ON |+---------------------------------+-------+mysql> show global variables like "%log%";sql_log_bin ={ON|OFF} #用于控制会话级别二进制日志功能的开启或关闭。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。binlog_cache_size =32768 #默认值32768 Binlog Cache用于在打开了二进制日志(binlog)记录功能的环境,是MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域。一般来说,如果我们的数据库中没有什么大事务,写入也不是特别频繁,2MB~4MB是一个合适的选择。但是如果我们的数据库大事务较多,写入量比较大,可与适当调高binlog_cache_size。同时,我们可以通过binlog_cache_use 以及 binlog_cache_disk_use来分析设置的binlog_cache_size是否足够,是否有大量的binlog_cache由于内存大小不够而使用临时文件(binlog_cache_disk_use)来缓存了。binlog_stmt_cache_size= 32768 #当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句。log_bin = mysql-bin #指定binlog的位置,默认在数据目录下。binlog-format= {ROW|STATEMENT|MIXED} #指定二进制日志的类型,默认为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。sync_binlog = 10 #设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步max_binlog_cache_size= {4096 .. 18446744073709547520} #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。max_binlog_stmt_cache_size= {4096 .. 18446744073709547520} #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存expire_log_days ={0..99} #设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。二进制日志定义方式:
其一、log_bin可以直接定义为文件路径,也可以为ON|OFF。
其二、通过编辑my.cnf中的log-bin选项可以开启二进制日志;形式如下:

查看二进制日志:
二进制日志的定义方式为二进制格式;使用此格式可以存储更多的信息,并且可以使写入二进制日志的效率更高。但是不能直接使用查看命令打开并查看二进制日志。
mysql> show binary logs; #显示当前服务器使用的二进制文件及大小mysql> show master logs; #显示主服务器使用的二进制文件及大小mysql> show master status; #当前使用的二进制文件及所处位置mysql> flush logs; #flush logs一般只会滚动中继日志和二进制日志。SHOW BINLOG EVENTS[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]mysql> show binlog events\G #查看所有的二进制信息mysql> show binlog events in 'mysql-bin.000011'; #查看指定日志的二进制信息+------------------+-----+-------------+-----------+-------------+----------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+-------------+-----------+-------------+----------------------------------------------+| mysql-bin.000011| 4 | Format_desc | 1 | 107 | Server ver: 5.5.33-log, Binlogver: 4 || mysql-bin.000011 |107 | Query | 1 | 190 | create database yong || mysql-bin.000011 |190 | Query | 1 | 293 | create table yong.tb1 (idint,name char(20)) || mysql-bin.000011 |293 | Query | 1 | 357 | BEGIN || mysql-bin.000011 |357 | Query | 1 | 452 | insert into yong.tb1values(1,'tom') || mysql-bin.000011 |452 | Xid | 1 | 479 | COMMIT /* xid=103 */ |+------------------+-----+-------------+-----------+-------------+----------------------------------------------+mysql> show binlog events in 'mysql-bin.000011' from 190; #从指定的事件位置开始mysql> showbinlog events in 'mysql-bin.000011' from 190 limit 3; #指定偏移量(不是语句,是事件)命令行下查看二进制日志:
由于无法使用cat等方式直接打开并查看二进制日志;所以必须使用mysqlbinlog命令。但是当正在执行mysql读写操作时建议不要使用此打开正在使用的二进制日志文件;若非要打开可flush logs。mysqlbinlog命令的使用方式:
[root@stu18 data]#mysqlbinlog mysql-bin.000017 #必须在数据目录下[root@stu18 data]#mysqlbinlog mysql-bin.000017 > /tmp/a.sql #导出:[root@stu18 data]#mysql < a.sql #导入二进制日志会记录大量的信息(其中包含一些无用的信息)。如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。但是,删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新产生的日志信息不可删(可以做即时点还原)。也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的。若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。删除二进制文件的方法如下:
1、删除所有的二进制日志(不可效仿):
使用RESET MASTER语句可以删除所有的二进制日志。该语句的形式如下:
mysql> reset master; +------------------+-----------+| Log_name | File_size |+------------------+-----------+| mysql-bin.000001| 107 |+------------------+-----------+2、根据文件或时间点来删除二进制日志:
mysql> PURGEBINARY LOGS TO 'mysql-bin.000007';Query OK, 0 rowsaffected (0.11 sec)mysql> showbinary logs;+------------------+-----------+| Log_name | File_size |+------------------+-----------+| mysql-bin.000007| 150 || mysql-bin.000008| 150 |mysql> PURGEBINARY LOGS BEFORE '13-10-19 10:26:36'; #使用时间来删除二进制日志 Mysql 日志 (转)的更多相关文章
- Mysql日志解析
修改Mysql配置 Mysql配置地址为: C:\Program Files (x86)\MySQL\MySQL Server 5.5 如果无法修改可以把my.ini拷贝出来,修改完后,再拷贝回去! ...
- mysql日志与备份恢复
一.mysql日志: mysql的日志种类有很多,常见的有二进制日志,一般查询日志,满查询日志,中继日志,事务日志等,具体信息可以通过 mysql> SHOW GLOBAL VARIABLES ...
- mysql日志开启和查看
mysql日志开启和查看. 找到mysql根目录下的my.ini文件,打开在下面插入 log-bin=mysql-bin binlog_format=mixed 然后重启mysql. 在dos端登录m ...
- MySQL日志管理
MySQL日志管理 2013年09月26日 ⁄ MySQL ⁄ 共 14266字 ⁄ 评论数 ⁄ 被围观 , views+ 一.日志类型: MySQL有几个不同的日志文件,可以帮助你找出mysqld内 ...
- Mysql日志操作
Mysql日志 mysql的日志类型:错误日志: -log-err记录mysql服务的启动.运行.停止mysql服务时出现的问题查询日志: -log记录建立的客户端连接和执行的语句慢查询日志: -lo ...
- mysql日志详细解析
MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据库的重要组成部分.日志文件中记录着mysql数据库运行期间发生的变化:也就是说用来记录mysql ...
- 如何查询MySql日志
如何查询MySql日志 分类: mysql2012-02-23 19:14 26756人阅读 评论(2) 收藏 举报 mysqlcommandprintingserversocketoutput 今天 ...
- MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin \'FEDERATED\' is disabled”
MYSQL启动报1067错误,系统日志中是"服务 mysql 意外停止" Mysql日志中则是:"Plugin \'FEDERATED\' is disabled&quo ...
- MySQL日志功能
1.查询日志 log={ON|OFF}:是否记录所有语句的日志信息于一般查询日志文件(general_log); log_output={TABLE|FILE|NONE},TABLE和FILE可以同时 ...
随机推荐
- 错误笔记:Caused by: java.lang.StackOverflowError
今天在将一个map转化成json出现堆栈异常,排查原因如下:出现循环递归( rootMap.put("rootMap", rootMap);),栈内存肯定耗光 代码: /** * ...
- Java 和 C+
文不对题,啦啦啦~~~ 第一次感到在windows平台java应用发布的无力,平时自己自写自用都是在自己电脑上,没什么感觉.如今要发布个给人用,打包应用.附加jre,这过程还得多加几行字说明,另人特么 ...
- 常见类型,isset(),empty()判断
<?php $a = NULL; var_dump($a); //NULL,[false],true var_dump(isset($a)); var_dump ...
- JQUERY 知识点的自我总结
一.名词释义 1 .js的入口函数:要等待文档树的加载完成,并且等待所有图片.文件都加载完成之后才开始执行. 2 .jquery入口函数会等待文档树的加载完成,并不会等待图片还有文件的加载 3 .j ...
- calender 软文
http://www.cnblogs.com/cloudgamer/archive/2008/08/23/1274459.html
- Linux mint 18版本开启SSH服务
linux mint 18版本默认是没有安装ssh server的 需要手动安装 安装ssh server: 此命令需要联网,会自动下载安装 安装之后看是否开始了ssh, 看到ssh-agent 和s ...
- Linux mint 14输入法问题
新安装了Linux mint 14,莫名其妙地没有了中文输入法,安装并设置IBUS为默认输入法,但怎么也没反应.点击输入法图标,上面显示“No input window”,其实这不关输入法自身程序和设 ...
- SQL取出 所有周六 周日的日期
SQL取出 所有周六 周日的日期 create table SatSun([id] int identity(1,1),[date] datetime,[weekday] char(6)) go de ...
- 解决Android应用安装快完毕时提示签名冲突
最近开发了一个Android手机应用,自己用Eclipse调试安装没问题,使用其他人调试生成的bin下的apk就会出现问题,安装到最后提示"安装签名冲突"错误,想了一下估计是没有给 ...
- 内存的crash记录分析
服务器上线之后,发生了3次crash,感觉是一次比较典型的内存bug的排错经历,所以特地记录下来供以后借鉴.下面描述一下3次crash时候的coredump的当前堆栈信息. 第一次crash的core ...