mysql binlog
一:定义:
二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;
作用:
MySQL的作用类似于Oracle的归档日志,可以用来查看数据库的变更历史(具体的时间点所有的SQL操作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、Mysql的复制(主主数据库的复制、主从数据库的复制)
1) Replication
对于主从部署的mysql server,master将所有可能更改数据库状态的操作写入binlog并将其同步给slave,后者重放binlog中的操作序列以便使其数据库状态与master达到一致,这样就实现了master-slave的数据同步。
2) Data Recover
数据库恢复时可以回放binlog重建宕机时的数据状态。假设数据库在某个备份点后又运行一段时间后宕机,则server重启后,可以在上次备份点的基础上,通过回放binlog来重做数据以便恢复上次备份点到server宕机这段时间内的数据状态。
注意:binlog只包含可能改变数据库状态的操作,因此,select或show等不会修改数据的操作不会记录在binlog中。
二进制日志的信息:
文件位置:默认存放位置为数据库文件所在目录下
文件的命名方式: 名称为hostname-bin.xxxxx (重启mysql一次将会自动生成一个新的binlog)
状态的查看:mysql> show variables like '%log_bin%';
mysql> show variables like '%log_bin%';
binlog配置:
1)生成的日志文件后缀则是6位数字的编码,从000001开始
log-bin = E:/log/logbin.log
2)log_slave_updates
在replication部署方式下,slave是否将同步自master的updates写入自己的binlog,只在slave启用binlog时有意义。不可动态配置
3) max_binlog_cache_size
同写文件类似,binlog也是先写内核buffer然后在某个时机下才刷盘的。该配置项指明binlog内存cache的最大size,默认最小值为4096Bytes。可以动态配置,一旦修改,则立即对当前所有活跃会话(active sessions)生效。
4) max_binlog_size
指定单个binlog文件的最大size,超过该值则关闭当前binlog文件并创建新的binlog以便后续写入。最小值为4096Bytes,最大值为1GB,默认也为1GB。可以动态配置
5) sync_binlog
指定binlog刷盘的触发时机。若值大于0,则每sync_binlong次写binlog的操作会触发一次刷盘。若配为1,则每次写binlog操作都会刷盘,最大程度地保证了数据安全,但效率最低;实际生产环境中,需根据业务需求配置合理的阈值。可以动态配置
查看binlog:
1:使用mysql客户端查看binlog
(1)查看所有日志文件:
show binary logs;
(2)查看正在写入的日志文件:
show master status;
(3)查看当前binlog文件内容:
show binlog events;
(4)查看指定的binlog日志文件
show binlog events in 'mysql_bin.000001'
2:用mysql自带的工具mysqlbinlog
根据mysql文档,写binlog的时机是:sql语句或transaction执行完,但任何相关的locks还未释放或事务还未最终commit前。这样保证了binlog记录的操作时序与数据库实际的数据变更顺序一致。
可以通过mysqlbinlog工具查看binlog内容,在mysql安装目录下输入./bin/mysqlbinlog -?或--help可以看到其用法,这里不再赘述。
导出:
c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 > e:/log/log.txt
">": 导入到文件中; ">>": 追加到文件中
如果有多个日志文件
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000002 >> e:/log/log.sq
按指定位置导出:
c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 > e:/log/log3.txt
按指定时间导出:
c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56"
--stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 >
e:/log/log_by_date22.txt
mysql删除binlog日志
1、设置日志保留时长expire_logs_days自动删除
show variables like ‘%expire_logs_days%’;
#这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:
set global expire_logs_days=7;
#设置了只保留7天BINLOG, 下次重启mysql这个参数默认会失败,所以需在my.cnf中设置
expire_logs_days = 7
2、手动删除BINLOG (purge binary logs)
PURGE {MASTER | BINARY} LOGS TO ‘log_name’
PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
#例如:
PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ‘2008-06-22 13:00:00′;
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
其它:
查看当前日志文件列表:show binary logs或是show master logs;
使用binlog日志的目的是为了方便恢复数据,所以我们不光要会删除,还要会用日志来恢复数据。
2.启用新的日志文件,一般备份完数据库后执行
flush logs;
3: 清空现有的所用bin-log
reset master;
使用日志恢复数据的方法
mysqlbinlog -d test /root/mysql/mysql-bin.000001|mysql -uroot -ppassword
#1、关于mysqlbinlog在mysql 5.0上的使用方法,可以参考:官方资料
#2、如果不知道log-bin存放的文件位置,可以使用下面的命令查看:
mysql -uroot -ppassword -e 'SHOW BINLOG EVENTS \G'
#3、当只是需要恢复部分记录的时候,你可以使用时间点或位置点来定位,例如:
mysqlbinlog --start-date="2005-04-20 9:01:00" --stop-date="2005-04-20
10:00:01" /var/log/mysql/bin.123456|mysql -uroot -ppassword[code]
#意思是恢复4月20日早上9点到10点这一段时间的数据。
mysqlbinlog --start-position="368301" --stop-position="368312"/var/log/mysql/bin.123456| mysql -uroot -pmypwd
#意思是重做368301到368312位置点之间的操作。(位置点可以就是用mysqlbinlog看到的at xxx节点)
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20
10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
#同样的,如果只是想查看某段时间的操作,直接把它导到一个文件即可。
有关mysql中binlog日志的删除,以及恢复数据的方法,就介绍这些了,希望对大家有所帮助。
相关文章
- MySQL Error number: MY-013907; Symbol: ER_IB_MSG_LOG_PARAMS_LEGACY_USAGE; SQLSTATE: HY000 报错 故障修复 远程处理
- mysql主键,外键,非空,唯一,默认约束及创建表的方法
- MySQL Variables optimizer_switch 数据库 参数变量解释及正确配置使用
- 信息MySQL存储并读取图片信息的方法(mysql读取图片)
- MySQL数据库:重命名操作指南(mysql数据库重命名)
- Linux下MySQL的快速部署(linux使用mysql)
- MySQL 版本:最佳选择(mysql版本选择)
- MySQL: Advanced Techniques for Improved Performance(mysql高级应用)
- 恢复MySQL被误删记录的方法(mysql误删)
- 深入探索MySQL数据库的修改方法(修改mysql数据库)
- MySQL 查看授权表:快速查找用户权限(mysql查看授权表)
- 如何查看和管理 MySQL 的事件计划程式:操作指南(查看mysql事件)
- MySQL:构建数据库技术精通之路(mysql单词)
- MySQL比较两张表:有何不同?(mysql对比两个表数据)
- MySQL实现txt文件导入(txt文件导入mysql)
- MySQL索引:提升数据查询性能的可思?(什么是mysql 索引)
- MySQL中的TBD是什么意思(mysql中tbd是啥)
- ASPX与MySQL结合打造全新网络体验(aspx与mysql)
- 移动端App使用MySQL数据库开发丰富应用(app用mysql)
- MySQL 如何创建临时表详解创建临时表的步骤及注意事项(mysql 中创建临时表)
- MySQL开不起来试试这些方法吧(mysql一直开不起来)
- MySQL存储引擎MyISAM与InnoDB对比(mysql两种存储引擎)
- MySQL双重排序深入探讨提高数据查询效率(mysql 两次排序)
- Redis与MySQL联动构建数据融合服务(redis配合mysql)