特点:
1:二进制日志以一种更有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。
2:二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。
3:二进制日志还包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据的语句。如果你想要记录所有语句(例如,为了识别有问题的查询),你应使用一般查询日志。
4:二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二进制日志包含备份后进行的所有更新。
5:二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。
6:运行服务器时若启用二进制日志则性能大约慢1%。但是,二进制日志的好处,即用于恢复并允许设置复制超过了这个小小的性能损失。
mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
更改my.ini:
[mysqld]
#binlog
server-id=1
log-bin=c:/mysqlbin/binlog.log
log-bin-index=c:/mysqlbin/binlog.index
重启mysql
net stop mysql
net start mysql
再查看mysql二进制status:
mysql>flush logs; --产生第一个日志文件
mysql> create table test(id int auto_increment not null primary key,val int,data varchar(20));
mysql> insert into test(val,data) values(10,'liang');
mysql> insert into test(val,data) values(20,'jia');
mysql> insert into test(val,data) values(30,'hui');
mysql> flush logs; --产生第二个日志文件
mysql> insert into test(val,data) values(40,'aaa');
mysql> insert into test(val,data) values(50,'bbb');
mysql> insert into test(val,data) values(60,'ccc');
mysql> delete from test where id between 4 and 5; --删除记录
mysql> insert into test(val,data) values(70,'ddd');
mysql> flush logs; --产生第三个文件文件
mysql> insert into test(val,data) values(80,'dddd');
mysql> insert into test(val,data) values(90,'eeee');
mysql> drop table test; --删除表
mysqlbinlog c:\mysqlbin\binlog.000002 | mysql -uroot -proot
shell> mysqlbinlog --start-date="2009-04-20 9:01:00" --stop-date="2009-04-20 10:00:01" mysql-bin.000001 | mysql -uUser -pUserPWD
shell> mysqlbinlog --start-position="368301" --stop-position="368312" mysql-bin.000001 | mysql -uUser -pUserPWD
原因:假设第1个日志文件包含一个CREATE TEMPORARY TABLE语句,第2个日志文件包含一个使用该临时表的语句,则会造成问题。
shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql -uUser -pUserPWD
另一个方法:
shell> mysqlbinlog hostname-bin.000001 > /tmp/statements.sql
shell> mysqlbinlog hostname-bin.000002 > /tmp/statements.sql
shell> mysql -uUser -pUserPWD -e "source /tmp/statements.sql"
连接mysql服务器查看和删除二进制日志文件查看二进制日志文件
mysql> SHOW BINLOG EVENTS \G;
mysql> SHOW MASTER LOGS;
清除二进制日志文件
mysql> PURGE { MASTER|BINARY } LOGS TO 'log_name';
mysql> PURGE { MASTER|BINARY } LOGS BEFORE 'datetime';
例如:
mysql> PURGE MASTER LOGS TO 'mysql-bin.000001';
mysql> PURGE MASTER LOGS BEFORE '2009-12-20 13:00:00';
另一种清除二进制日志方法
mysql > flush logs;
mysql > reset master;