二进制日志主要用于记录任何有可能改变数据库的操作,因此主要用于记录 DDL DML语句,包括数据库授权语气。记录格式为二进制的。我们无法使用普通文本查看命令取查看。只能使用mysql提供的专用命令,叫做mysqlbinlog
二进制日志非常重要用于我们数据库服务器崩溃时候,依靠二进制日志可以进行恢复
一般情况下位于数据目录下,以主机名开头或者是mysql-bin开头,mysql服务器重启一次,这个日志就会滚动一次,这个日志需要不停的滚动。而且记录增长的速度非常快。是能够实现mysql复制,以及即时点恢复的重要工具
查看当前服务器上面所有的二进制日志文件
show binary logs;
查看数据库是否记录二进制日志
SHOW GLOBAL VARIABLES LIKE ‘%log%‘;
开启二进制日志需要在配置文件中定义。把 log-bin 前面的 # 注释掉即可
二进制日志的格式:
1 基于语句(statemen t);如果两次执行带来的结果是相同的就基于语句来记录
2 基于行 (row) :把那个行的相关改变记录下来。
3 混合模式 (mixed):
二进制日志增长到一定程度就会滚动一次。
如果我们数据文件有10G,我们周三备份了10G,运行两天后到了周五,服务器硬盘坏了,我们由于备份时候只备份到了周三,后面两天产生的数据没有备份,就需要依赖二进制文件进行找回那两天的数据,因此我们的二进制日志文件最好和数据库服务器不要放在同一块硬盘上面。
这种恢复数据叫做即时点还原
如果数据没有备份,但是二进制日志文件全部在,也可以恢复,但是恢复时间比较慢
二进制日志事件:
二进制时间日志在记录时候会记录:
1.事件产生的时间。
2.每一个事件在日志文件中的相对位置
二进制日志文件组成:
索引文件 (保存文件在数据目录下面叫做mysql-bin.index是一个文本文件)从里面可以看到一共产生了多少个二进制日志文件
二进制日志文件
二进制日志文件默认保存带数据目录下面,通常名称是 mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 ..........等等
使用show master status; 查看当前正在使用的二进制日志文件
查看某个二进制日志文件的内容
比如查看 mysql-bin.000003
使用命令 SHOW BINLOG EVENTS IN ‘mysql-bin.000003‘;
还可以加上FROM 命令 表示从哪个位置开始查看
SHOW BINLOG EVENTS IN ‘mysql-bin.000003 FROM 107‘;
server_id :表示由哪个mysql服务器产生的二进制日志
使用mysqlbinlog也可以查看日志。并且指定日志显示的信息。
常用选项: --start-datetime --stop-datetime
--start-position --stop-position
不跟选项就是显示整个文件内容
mysqlbinlog mysql-bin.000003
指定位置查看
mysqlbinlog --start-position = 107 --stop-postion = 358 mysql-bin.000003
指定时间查看
mysqlbinlog --start-datetime=‘2016-03-13 10:40:50‘ mysql-bin.000003
在Linux上面 可以将查看的结果保存到一个我们指定路径的 以 .sql 结尾的文件中
mysqlbinlog --start-datetime=‘2016-03-13 10:40:50‘ mysql-bin.000003 >/root/a.sql
以后你可以将这个sql文件直接导入到数据库当中,这个sql文件就会将里面的sql语气执行一遍。所以我们通常通过使用mysqlbinlog 查询到结果输出重定向到sql脚本中,导入到其他数据库中就可以实现即时点还原
手动滚动日志:FLUSH LOGS; (只会滚动二进制日志)
决不允许使用rm 命令删除二进制日志文件,会导致数据库崩溃
删除二进制日志文件使用
PURGE 命令
用法
PURGE BINARY LOGS TO log_name; 这个是把这个日志名称之前的日志全部删除,而不是删除这个日志文件
与二进制日志相关的服务器变量。使用SHOW GLOBAL VARIABLES LIKE ‘%log%‘;
binlog_format :二进制日志的格式
binlog_cache_size :缓存大小,二进制日志写入磁盘之前先在内存进行缓存binlog_cache_size 随着 binlog_stmt_cache_size 大小的改变而改变
binlog_stmt_cache_size:也是缓存,记录跟事务相关的二进制日志缓存大小改变binlog_stmt_cache_size大小,binlog_cache_size也会跟着改变,不建议调大,有可能造成数据丢失
log_bin : 是否启用二进制日志,这个功能开启,但是不一定就会记录二进制日志是否真正的记录日志还需要取决于另外的变量。开启时候需要在配置文件指定一下路径。
sql_log_bin:用于控制二进制日志信息是否记录进日志文件
sql_log_off :用于控制是否禁止将一般查询日志类记录到查询日志文件中,与二进制日志无关
sync_binlog:设定多久同步一次二进制日志到磁盘文件中,0表示不同步,为0时取决于auto_commit(事务自动提交,立即被写入日志)。如果这个值是任何正数,就表示多少次写操作之后 同步到磁盘中。这里设置为0的好处是事务不提交,日志就不会写入磁盘。这样IO也会随之降低,性能得到提高
二进制日志所在的硬盘速度越快,IO性能越好,我们的服务器性能也就越好,因为我们的二进制日志只有一个,如果并发多个线程同时来执行修改数据库操作时候,都需要几个线程同时写入二进制日志。因此如果我们硬盘是固态硬盘,读写速度就越好,服务器性能越好
expire_logs_days: 表示多少天以后日志日志会过期,并自动删除
硬盘IO性能指标:IOPS 表示硬盘IO每秒能进行的IO操作数。
台式机硬盘:每秒100次
SCSI硬盘:每秒200次
SSD:每秒大概500-2000
原文地址:https://www.cnblogs.com/SunshineLittleCat/p/8279290.html