您好,欢迎访问一九零五行业门户网

MySQL InnoDB管理和备份二进制日志_MySQL

bitscn.com
mysql innodb管理和备份二进制日志
㈠ 二进制日志的重要性
如果有某个时间点的数据备份和所有从那时以后的二进制日志
        就可以重放自从上次全备以来的二进制日志并前滚所有的变更
㈡ 二进制日志配置的最佳实践
对于 innodb 如果仅是启用二进制日志是不够、还需要其他措施来保证安全:
        推荐配置如下:
● sync_binlog = 1
表示采用同步写磁盘的方式来写二进制日志、这时写操作便绕开了os的缓冲
           该默认值为0
● innodb_support_xa = 1
确保二进制日志和innodb 数据文件的同步
㈢ 影响二进制日志备份策略的因素
如下图:
㈣ 二进制日志的格式
二进制日志的粒度是事件、每个事件都有固定的事件头、含:when、what、who等
        因其格式为二进制不可看、我们可借助 mysqlbinlog 查看其内容
        下面是一个例子:
[plain] 
[mysql@even data]$ mysqlbinlog -vv mysql-bin.000023  
/*!40019 set @@session.max_insert_delayed_threads=0*/;  
/*!50003 set @old_completion_type=@@completion_type,completion_type=0*/;  
delimiter /*!*/;  
# at 4  
#130515 12:35:29 server id 2  end_log_pos 107   start: binlog v 4, server v 5.5.16-log created 130515 12:35:29 at startup  
# warning: this binlog is either in use or was not closed properly.  
rollback/*!*/;  
binlog '  
krctuq8caaaazwaaagsaaaabaaqans41lje2lwxvzwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  
aaaaaaaaaaaaaaaaaacrejnrezgnaagaegaebaqeegaavaaegggaaaaicagcaa==  
'/*!*/;  
# at 107  
#130515 12:37:47 server id 2  end_log_pos 255   query   thread_id=3     exec_time=0     error_code=0  
set timestamp=1368592667/*!*/;  
set @@session.pseudo_thread_id=3/*!*/;  
set @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;  
set @@session.sql_mode=0/*!*/;  
set @@session.auto_increment_increment=2, @@session.auto_increment_offset=2/*!*/;  
/*!/c utf8 *//*!*/;  
set @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;  
set @@session.lc_time_names=0/*!*/;  
set @@session.collation_database=default/*!*/;  
alter database db_rocky character set = utf8mb4 collate = utf8mb4_unicode_ci  
/*!*/;  
delimiter ;  
# end of log file  
rollback /* added by mysqlbinlog */;  
/*!50003 set completion_type=@old_completion_type*/;
这里列了 2 个事件、来看第二个事件:
[plain] 
# at 107  
#130515 12:37:47 server id 2  end_log_pos 255   query   thread_id=3     exec_time=0     error_code=0
第一行表示该事件的起始位置:at 107 
       第二行包含如下几项:
       ● 事件的日期和时间:130515 12:37:47
       ● 服务器 id、这对于防止复制之间无限循环和其他问题是非常有必要的
       ● 下一个事件的开始位置:end_log_pos 255 
          注意了、该值通常是不正确的
          因为、主库会复制事件到一个缓冲区、但这样做时
          mysql 并不知道下个日志事件的位置
● 事件类型、这里是 query
       ● 执行改事件的线程 id、这点对审计蛮重要的
       ● 语句的时间戳和写入二进制日志的时间差:exec_time
          该值在复制落后的备库上会有很大偏差
● 事件产生的错误代码
㈤ 清除老的二进制日志的方法
不要用 rm 删除日志、否则、将会导致 mysql-bin.index 状态文件与磁盘上的不一致
        应该用类似下面的 cron 命令:
[plain] 
0 0 * * * /usr/bin/myql -e purge master logs before current_date - interval n day
bitscn.com
其它类似信息

推荐信息