您的位置:首页 > 数据库 > MySQL

Mysql binlog

2016-07-28 16:01 387 查看
Mysql binlog详解:

Mysql binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)

的所有语句。语句以“事件”的形式保存,它描述数据更改。

binlog作用:

因为有了数据更新的binlog,所以可以用于实时备份,与master/slave复制。

和binlog有关参数:

log_bin:设置此参数表示启用binlog功能,并指定路径名称

log_bin_index:设置此参数是指定二进制索引文件的路径与名称

binlog_do_db:此参数表示只记录指定数据库的二进制日志

binlog_ignore_db:此参数表示不记录指定的数据库的二进制日志

max_binlog_cache_size:此参数表示binlog使用的内存最大的尺寸

binlog_cache_size:

此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。

binlog_cache_use:使用二进制日志缓存的事务数量

binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量

max_binlog_size:

Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束

binlog的删除:

binlog的删除可以手工删除或自动删除

自动删除binlog
通过binlog参数(expire_logs_days )来实现mysql自动删除binlog

mysql> show binary logs;

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

| Log_name             | File_size |

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

| mysql3306-bin.000001 |     65423 |

| mysql3306-bin.000002 |   1176885 |

| mysql3306-bin.000003 |       151 |

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

3 rows in set (0.03 sec)

mysql> show variables like 'expire_logs_days';

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

| Variable_name    | Value |

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

| expire_logs_days | 7     |

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

1 row in set (0.01 sec)

mysql> set global expire_logs_days=3;

Empty set (0.00 sec)

mysql> show variables like 'expire_logs_days';

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

| Variable_name    | Value |

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

| expire_logs_days | 3     |

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

1 row in set (0.00 sec)

手工删除binlog

mysql> show master logs;      //删除master的binlog

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

| Log_name             | File_size |

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

| mysql3306-bin.000001 |     65423 |

| mysql3306-bin.000002 |   1176885 |

| mysql3306-bin.000003 |       202 |

| mysql3306-bin.000004 |       151 |

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

4 rows in set (0.02 sec)

mysql> reset master;

Query OK, 0 rows affected (0.03 sec)

mysql> show master logs;

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

| Log_name             | File_size |

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

| mysql3306-bin.000001 |       151 |

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

1 row in set (0.00 sec)

mysql> reset slave;                                                                          //删除slave的中继日志

mysql> purge master logs before '2016-07-25 17:20:00';      //删除指定日期以前的日志索引中binlog日志文件

mysql> purge master logs to 'binlog.000002';                          //删除指定日志文件的日志索引中binlog日志文件, 或者直接用操作系统命令直接删除

mysql> set sql_log_bin=1/0;                                                        //如果用户有super权限,可以启用或禁用当前会话的binlog记录

mysql> show master logs;                                                           //查看master的binlog日志 

mysql> show binary logs;                                                             //查看master的binlog日志

mysql> show master status;                                                       //用于提供master二进制日志文件的状态信息

mysql> show slave hosts;                                                           //显示当前注册的slave的列表。不以--report-host=slave_name选项为开头的slave不会显示在本列表中

准备一组事务:

drop database test;

create database test;

create table test.test (id int);

insert into test values(1),(2),(3),(4),(5);

binglog的查看:

通过mysqlbinlog命令可以查看binlog的内容

[root@mysql3 logs]# /usr/local/mysql/bin/mysqlbinlog mysql3306-bin.000001|more

... ...

# at 332

#160718 15:05:44 server id 233306  end_log_pos 426 CRC32 0xd2836d69     Query   thread_id=7     exec_time=0     error_code=0

SET TIMESTAMP=1468825544/*!*/;

create database test

/*!*/;

# at 426

#160718 15:06:10 server id 233306  end_log_pos 474 CRC32 0x996d51b7     GTID [commit=yes]

SET @@SESSION.GTID_NEXT= '7c77185a-4c49-11e6-8450-000c29c7b3d5:3'/*!*/;

# at 474

#160718 15:06:10 server id 233306  end_log_pos 574 CRC32 0x09f86ff0     Query   thread_id=7     exec_time=0     error_code=0

SET TIMESTAMP=1468825570/*!*/;

create table test.test(id int)

/*!*/;

# at 574

#160718 15:06:46 server id 233306  end_log_pos 622 CRC32 0x59035497     GTID [commit=yes]

SET @@SESSION.GTID_NEXT= '7c77185a-4c49-11e6-8450-000c29c7b3d5:4'/*!*/;

# at 622

#160718 15:06:46 server id 233306  end_log_pos 690 CRC32 0xba29b1ce     Query   thread_id=7     exec_time=0     error_code=0

SET TIMESTAMP=1468825606/*!*/;

BEGIN

/*!*/;

# at 690

#160718 15:06:46 server id 233306  end_log_pos 737 CRC32 0xde61ed2b     Table_map: `test`.`test` mapped to number 72

# at 737

#160718 15:06:46 server id 233306  end_log_pos 797 CRC32 0xa4a5fdc3     Write_rows: table id 72 flags: STMT_END_F

解析binlog格式:

位置

位于文件中的位置,“at 332”说明“事件”的起点,是以第332字节开始;“end_log_pos 426”说明以第426字节结束

 

时间戳

事件发生的时间戳:“160718 15:05:44”

 

事件执行时间

事件执行花费的时间:"exec_time=0"

 

错误码

错误码为:“error_code=0”

 

服务器的标识
服务器的标识id:“server id 233306”

参考文档:
http://blog.csdn.net/wyzxg/article/details/7412777
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: