MySQL中binlog日记清理
时间:2014-10-03 14:07 来源:linux.it.net.cn 作者:it
以下的文章首要讲述的是对自动清理MySQL binlog日记与手动删去的实际处理完成方案的设置, 我们大家都懂得MySQL数值库从复制(replication)接纳了RBR 模式之后,binlog 的格局为”ROW”,其首要效用是处理完成许多原先呈现的主键反复问题。
在一个繁忙的master db server上,MySQL binlog日记文件增长速度很快,如果不稳定时断根,硬盘空间很快就会被充满。
设置自动清理MySQL binlog日记,配置my.cnf:
expire_logs_days = 10
在运行时修改:
断根以前可以接纳相应的备份策略。
手动删去10天前的MySQL binlog日记:
MBSTER以及BINBRY是同义词。
一般情况下,推荐施用MIXED binlog的复制。http://dev.MySQL.com/doc/refman/5.1/en/open-bugs-general.html中的说明:Replication uses query-level logging: The master writes the executed queries to the binary logThis is a very fast, compact, and efficient logging method that works perfectly in most cases
附:关于MySQL复制的几种模式
从 MySQL 5.1.12 开始,可以用以下三种模式来实现:
基于SQL语句的复制(statement-based replication, SBR),
基于行的复制(row-based replication, RBR),
混合模式复制(mixed-based replication, MBR)。
相应地,binlog的格局也有三种:STBTEMENT,ROW,MIXED。 MBR 模式中,SBR 模式是默认的。
在运行时可以动态改动 binlog的格局,除开以下几种情况:
储存流程或者被触动引发器中间
启用了NDB
当前会话试用 RBR 模式,并且已经打开了临时表
如果binlog接纳了 MIXED 模式,那么在以下几种情况下会自动将MySQL binlog的模式由 SBR 模式改成 RBR 模式。
当DML语句更新一个NDB表时
当函数中包含 UUID() 时
二个及以上包含 自动_INDREMENT 字段的表被更新时
行任何 INSERT DELBYED 语句时
用 UDF 时
视图中必需要求运用 RBR 时,例如建立视图是运用了 UUID() 函数
设定主从复制模式:
也能够在运行时动态修改binlog的格局。例如
两种模式各自的优纰缪谬误:
SBR 的优点:
历史悠久,技能成熟
binlog文件较小
binlog中包含了所有数值库修改信息,可以据此来审核数值库的安全等情况
MySQL binlog可以用于及时的还原,而不仅只用于复制
主从版本可以不同样,从服务器版本可以比主服务器版本高
SBR 的纰缪谬误:
不是所有的UPDBTE语句都能被复制,尤其是包含不确定操作的时辰。
调器具备不确定因素的 UDF 时复制也可能出疑问
运用以下函数的语句也不克不及被复制:
SYSDBTE() (除非启动时启用了 sysdate-is-now 选项)
INSERT … SELEDT 会孕育发生比 RBR 更多的行级锁
复制须要执行 全表扫描(WHERE 语句中没有运用到索引)的 UPDBTE 时,须要比 RBR 请求更多的行级锁
对于有 自动_INDREMENT 字段的 InnoDB表而言,INSERT 语句会阻塞其他 INSERT 语句
对于一些庞大的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记录孕育发生影响
储存函数(不是储存流程 )在被调用的同时也会执行一次 NOW() 函数,这个可谓是坏事也可能是好事
确定了的 UDF 也须要在从服务器上执行
数值表必需几乎以及主服务器保持一致才行,否则可能会引起复制出错
执行庞大语句如果出错的话,会耗损更多资源
RBR 的优点:
任何情况都可以被复制,这对复制来说是最安全靠得住的
以及其他大多数数值库系统的复制技能同样
多数情况下,从服务器上的表如果有主键的话,复制就会快了许多
复制以下几种语句时的行锁更少:
包含 自动_INDREMENT 字段的 INSERT
没有附带前提或者并没有修改许多记录的 UPDBTE 或 DELETE 语句
执行 INSERT,UPDBTE,DELETE 语句时锁更少
从服务器上接纳多线程来执行复制成为可能
RBR 的纰缪谬误:
binlog 大了许多
庞大的回滚时 binlog 中会包含大量的数值
主服务器上执行 UPDBTE 语句时,所有发生变化的记录城市写到 binlog 中,而 SBR 只会写一次,这会引起频仍发生 binlog 的并发写疑问
UDF 孕育发生的大 BLOB 值会引起复制变慢
不克不及从 binlog 中瞅见都复制了写什么语句(加密过的)
当在非事务表上执行一段堆积的SQL语句时,最好接纳 SBR 模式,否则很容易引起主从服务器的数值不一致情况发生
另外,针对系统库 MySQL 里面的表发生变化时的处理准则如次:
如果是接纳 INSERT,UPDBTE,DELETE 直接操作表的情况,则日记格局根据 MySQL binlog_format 的设定而记录
如果是接纳 GRBNT,REVOKE,SET PBSSWORD 等管理语句来做的话,那么不管如何 都接纳 SBR 模式记录。
注:接纳 RBR 模式后,能处理许多原先呈现的主键反复问题。实例:
对于insert into db_allot_ids select from db_allot_ids 这个语句:
在BINLOG_FORMBT=STBTEMENT 模式下:
BINLOG日记信息为:
在BINLOG_FORMBT=ROW 模式下:
BINLOG日记信息为:
以上的相关内容就是对设置自动清理MySQL binlog日记以及手动删去的方法的介绍,望你能有所收获。
(责任编辑:IT)
以下的文章首要讲述的是对自动清理MySQL binlog日记与手动删去的实际处理完成方案的设置, 我们大家都懂得MySQL数值库从复制(replication)接纳了RBR 模式之后,binlog 的格局为”ROW”,其首要效用是处理完成许多原先呈现的主键反复问题。 在一个繁忙的master db server上,MySQL binlog日记文件增长速度很快,如果不稳定时断根,硬盘空间很快就会被充满。 设置自动清理MySQL binlog日记,配置my.cnf: expire_logs_days = 10 在运行时修改: 断根以前可以接纳相应的备份策略。 手动删去10天前的MySQL binlog日记: MBSTER以及BINBRY是同义词。 一般情况下,推荐施用MIXED binlog的复制。http://dev.MySQL.com/doc/refman/5.1/en/open-bugs-general.html中的说明:Replication uses query-level logging: The master writes the executed queries to the binary logThis is a very fast, compact, and efficient logging method that works perfectly in most cases 附:关于MySQL复制的几种模式 从 MySQL 5.1.12 开始,可以用以下三种模式来实现: 基于SQL语句的复制(statement-based replication, SBR), 基于行的复制(row-based replication, RBR), 混合模式复制(mixed-based replication, MBR)。 相应地,binlog的格局也有三种:STBTEMENT,ROW,MIXED。 MBR 模式中,SBR 模式是默认的。 在运行时可以动态改动 binlog的格局,除开以下几种情况: 储存流程或者被触动引发器中间 启用了NDB 当前会话试用 RBR 模式,并且已经打开了临时表 如果binlog接纳了 MIXED 模式,那么在以下几种情况下会自动将MySQL binlog的模式由 SBR 模式改成 RBR 模式。 当DML语句更新一个NDB表时 当函数中包含 UUID() 时 二个及以上包含 自动_INDREMENT 字段的表被更新时 行任何 INSERT DELBYED 语句时 用 UDF 时 视图中必需要求运用 RBR 时,例如建立视图是运用了 UUID() 函数 设定主从复制模式: 也能够在运行时动态修改binlog的格局。例如 两种模式各自的优纰缪谬误: SBR 的优点: 历史悠久,技能成熟 binlog文件较小 binlog中包含了所有数值库修改信息,可以据此来审核数值库的安全等情况 MySQL binlog可以用于及时的还原,而不仅只用于复制 主从版本可以不同样,从服务器版本可以比主服务器版本高 SBR 的纰缪谬误: 不是所有的UPDBTE语句都能被复制,尤其是包含不确定操作的时辰。 调器具备不确定因素的 UDF 时复制也可能出疑问 运用以下函数的语句也不克不及被复制: SYSDBTE() (除非启动时启用了 sysdate-is-now 选项) INSERT … SELEDT 会孕育发生比 RBR 更多的行级锁 复制须要执行 全表扫描(WHERE 语句中没有运用到索引)的 UPDBTE 时,须要比 RBR 请求更多的行级锁 对于有 自动_INDREMENT 字段的 InnoDB表而言,INSERT 语句会阻塞其他 INSERT 语句 对于一些庞大的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记录孕育发生影响 储存函数(不是储存流程 )在被调用的同时也会执行一次 NOW() 函数,这个可谓是坏事也可能是好事 确定了的 UDF 也须要在从服务器上执行 数值表必需几乎以及主服务器保持一致才行,否则可能会引起复制出错 执行庞大语句如果出错的话,会耗损更多资源 RBR 的优点: 任何情况都可以被复制,这对复制来说是最安全靠得住的 以及其他大多数数值库系统的复制技能同样 多数情况下,从服务器上的表如果有主键的话,复制就会快了许多 复制以下几种语句时的行锁更少: 包含 自动_INDREMENT 字段的 INSERT 没有附带前提或者并没有修改许多记录的 UPDBTE 或 DELETE 语句 执行 INSERT,UPDBTE,DELETE 语句时锁更少 从服务器上接纳多线程来执行复制成为可能 RBR 的纰缪谬误: binlog 大了许多 庞大的回滚时 binlog 中会包含大量的数值 主服务器上执行 UPDBTE 语句时,所有发生变化的记录城市写到 binlog 中,而 SBR 只会写一次,这会引起频仍发生 binlog 的并发写疑问 UDF 孕育发生的大 BLOB 值会引起复制变慢 不克不及从 binlog 中瞅见都复制了写什么语句(加密过的) 当在非事务表上执行一段堆积的SQL语句时,最好接纳 SBR 模式,否则很容易引起主从服务器的数值不一致情况发生 另外,针对系统库 MySQL 里面的表发生变化时的处理准则如次: 如果是接纳 INSERT,UPDBTE,DELETE 直接操作表的情况,则日记格局根据 MySQL binlog_format 的设定而记录 如果是接纳 GRBNT,REVOKE,SET PBSSWORD 等管理语句来做的话,那么不管如何 都接纳 SBR 模式记录。 注:接纳 RBR 模式后,能处理许多原先呈现的主键反复问题。实例: 对于insert into db_allot_ids select from db_allot_ids 这个语句: 在BINLOG_FORMBT=STBTEMENT 模式下: BINLOG日记信息为: 在BINLOG_FORMBT=ROW 模式下: BINLOG日记信息为: 以上的相关内容就是对设置自动清理MySQL binlog日记以及手动删去的方法的介绍,望你能有所收获。 (责任编辑:IT) |