Binlog是mysql的二进制日志, 它的主要目的是基于数据重放机制最大可能的恢复数据库的更新,由于二进制日志包含数据库备份后进行的全部更新。mysql
Mysql的主从复制特性也依赖于此实现。sql
Binlog的启动只增长 1% 的mysql负载, 因此不会成为瓶颈。数据库
Mysql在数据操做成功后将按照逐LOG_EVENT递增的形式追加一条binlog。vim
log_bin = /var/log/mysql-bin.log ## 可选配置 binlog_format = MIXED #默认statement, 推荐mixed expire_logs_days = 7 max_binlog_size = 100m
1 基于语句 statementpost
记录数据变化的sql语句。通常日志量较小,可是语句执行的可靠性较低。spa
2 基于行 row日志
记录被修改的数据行。数据细节清晰可靠,但通常日志量较大。code
3 混合模式mixedorm
以上两种格式的合并。索引
binlog文件由 索引文件 及 具体日志 文件构成:
mysql-bin.index #索引文件, 内容为全部日志文件名, 一行一个
mysql-bin.000001 #具体日志文件, 每次mysql服务重启都会新增一个日志文件, 序列号增一。
#内容包含了当下mysql服务中, 全部库的数据变动。
须要注意的是, 因为binlog是二进制日志, 因此你直接 cat 或者 vim 去查看编辑日志文件, 看到的会是乱码。
因此必须经过以下命令来查看日志。
. Mysql Shell下查看: show binary logs #查看binlog列表 show master status #查看当前写入的binlog文件 #(每次服务重启都会新建一个binlog,具体运行时往最近建立的binlog写入) show binlog evnets 【in 'log_name'】 #查看指定binlog, 没有指定则默认第一个。注意有单引号。
. Bash下查看, 更细致的分析: ##若是binlog格式是行模式的,请加 -vv参数 mysqlbinlog --start-datetime='2015-01-01 00:00:00' --stop-datetime='2015-06-01 01:01:01' 【-d 库名】 二进制文件 #时间端内查看 mysqlbinlog --start-postion=1 --stop-position=1000 【-d 库名】 二进制文件 #Event Pos 区间内查看
若是数据库被各类缘由误删, 则咱们能够结合 binlog 及 上次数据库的备份 来恢复
#先导入备份的数据库,而后执行如下命令 #注意:若是是从上次备份来恢复, 则 mysqlbinlog 还需指定上次备份的时间 --start-date mysqlbinlog -d DatabaseName binlog-file|mysql -u user -p