【基本介绍】
日志是把数据库的每一个变化都记录到一个文件里面(日志文件)。MySQL默认只打开出错日志,因为过多的日志会影响系统的处理性能。5.0前支持文本和二进制格式,5.0后只支持二进制格式,因为二进制日志在性能、信息处理方面有更多的优点。
【配置】
在my.cnf里面配置binlog相关
#binlog
log-bin = mysql-bin #这些路径相对于datadir
max_binlog_size #binlog的最大默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束。
log-bin-index = mysql-bin.index #定义binlog的命名
binlog-do-db=db_name #只记录指定数据库的二进制日志
binlog-ignore-db=db_name #不记录指定数据库的二进制日志
sync_binlog #这个参数影响mysql的性能和完整性 ,为0时不做任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统Crash,在文件系统缓存中的所有Binlog信息都会丢失
binlog_cache_size #表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试
max_binlog_cache_size #binlog使用的内存最大的尺寸
expire_logs_days=5 #日志文件过期时间
【样式】
-rw-rw----. 1 mysql mysql 106 Jul 15 13:53 mysql-bin.000012
-rw-rw----. 1 mysql mysql 106 Jul 15 14:02 mysql-bin.000013
-rw-rw----. 1 mysql mysql 5640912 Jul 16 11:25 mysql-bin.000014
-rw-rw----. 1 mysql mysql 483965 Jul 16 14:14 mysql-bin.000015
-rw-rw----. 1 mysql mysql 285 Jul 16 11:25 mysql-bin.index
mysql-bin.index记录binlog的文件名,增量备份时依据某一时刻的全备份来的。所以要定期全备份并翻滚日志。
【binlog操作】
[root@bogon mysql]# /usr/local/mysql/bin/mysqlbinlog mysql-bin.000015 | head -20
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#140716 11:25:44 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.72-log created 140716 11:25:44
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
uPDFUw8BAAAAZgAAAGoAAAABAAQANS4xLjcyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 106
#140716 11:26:01 server id 1 end_log_pos 241 Query thread_id=10001 exec_time=0 error_code=0
use `cacti`/*!*/;
SET TIMESTAMP=1405481161/*!*/;
SET @@session.pseudo_thread_id=10001/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
mysqlbinlog用来读取binlog文件,里面的at就是log position ,下面一行的就是时间节点
还原实例:
mysqlbinlog mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --stop-datetime="2010-09-05 10:55:44" mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --start-position="2217830" --stop-position="2218050" mysql-bin.000014 | mysql -uroot -p test
【日志翻滚】
重新生成新的log
- 服务器重启
- 服务器被更新
- 日志达到了最大日志长度max_binlog_size
- 日志被刷新mysql> flush logs;
删除旧的log
- RESET MASTER
- purge master logs before '2013-07-30 01:27:04';
【参考】
http://blog.bytetouch.com/system-administration/mysql-backup-and-point-in-time-recovery-with-binary-logs/
http://dev.mysql.com/doc/refman/5.0/en/replication-options-binary-log.html#option_mysqld_log-bin