MySQL日志-二进制日志(Binlog)

MySQL有下面几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:

日志文件

记入文件中的信息类型

错误日志(-log-err)

记录启动、运行或停止mysqld时出现的问题。

查询日志(-log)

记录建立的客户端连接和执行的语句。

更新日志(-log-update)

记录更改数据的语句。不赞成使用该日志。

二进制日志(-log-bin)

记录所有更改数据的语句。还用于复制。

慢日志(-log-slow-queries)

记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。


在mysql的安装目录下,打开my.cnf,在后面加上上面的参数,保存后重启mysql服务就行了。  
例如: 
  
   log-error= d:/mysql/log/log-error.log
   #log=......
   #log-slow-queries=......
   #log-update=......
   #log-bin=......
         
上面只开启了错误日志,要开其他的日志就把前面的“#”去掉并设置日志格式及目录。

下面重点介绍一下二进制日志(binlog)

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

包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据的语句。
下面介绍一下和二进制日志(binlog)相关的一些操作。

1、是否启用了日志
ON为启用
mysql>   show variables like 'log_bin';

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

| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+

2、查看二进制日志
2.1、查看所有二进制日志列表
mysql> show binary logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |      2036 |
| binlog.000002 |       143 |
| binlog.000003 |       143 |
| binlog.000004 |       143 |
| binlog.000005 |       143 |
| binlog.000006 |       120 |
+---------------+-----------+

2.2、查看正在使用的二进制日志状态信息
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000006 |      120 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

3、查看binlog日志的大小
mysql> show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name   | Value      |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+

4、删除binlog日志
删除binlog日志有以下几种方式:
4.1、设置expire_logs_days 参数
expire_logs_days 参数表示二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 0     |
+------------------+-------+
可以使用下列方式修改expire_logs_days参数值。
mysql> set global expire_logs_days=5;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 5     |
+------------------+-------+

4.2、删除全部二进制日志
使用RESET MASTER;命令可以删除全部binlog。
mysql> RESET MASTER;

4.3、使用PURGE MASTER LOGS
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
例如:
PURGE MASTER LOGS TO 'binlog.000003';
PURGE MASTER LOGS BEFORE '2016-04-02 22:46:26';
BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同义词。

5、查看二进制文件的内容
查看二进制文件的内容用mysqlbinlog
[root@mysql1 log]# mysqlbinlog binlog.000001 |more
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#160426 13:44:42 server id 1  end_log_pos 120   Start: binlog v 4, server v 5.6.30-log created 160426 13:44:42 at startup
ROLLBACK/*!*/;
BINLOG '
SgAfVw8BAAAAdAAAAHgAAAAAAAQANS42LjMwLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABKAB9XEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAZhk
qys=
'/*!*/;
# at 120
。。。。。。。。。。。。。。。。。。。。。。。。。。。
-----日志里面能看到你对数据库做的更改操作,比如下面是我的日志里面其中一个操作。
use `test2`/*!*/;
SET TIMESTAMP=1461649838/*!*/;
insert into t values(1,'2016-04-27')#
/*!*/;
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

请使用浏览器的分享功能分享到微信等