热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQLbinlog与增量备份的基本原理总结

定义binlog是记录所有数据库表结构变更(例如CREATE、ALTERTABLE…)以及表数据修改(INSERT、UPDATE即使up

定义


  • binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE即使update没有导致数据变化也会被记录、DELETE…)的二进制日志。
  • binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。
  • 以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

作用


  • 复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves并回放来达到master-slave数据一致的目的

  • 数据恢复:通过mysqlbinlog工具恢复数据

  • 增量备份(包括差异增量、累积增量,主要利用flush logs配合mysqlbinlog来对binlog中的二进制数据进行分析,将对应数据库的增量数据到出来)

    利用mysqlbinlog解析binlog来进行增量恢复时需要注意

    1. 不要使用 base64-output=decode-rows 参数
      –base64-output=decode-rows主要是解析 ROW 级别 binlog 日志时使用。
      我们解析日志的时候都会使用:

      # mysqlbinlog -v --base64-output=decode-rows mysql-bin.0000XX
      这是我们解析 binlog 日志时使用的命令,我们可以很直观的分析 binlog 日志。
      但是我们想要恢复到数据库中的时候,不能使用–base64-output=decode-rows 参数,否则是无法恢复到数据库的。

    2. 是否使用–skip-gtids=true参数
      –skip-gtids=xxx的作用为:mysqldump
      是否使用–skip-gtids=true 参数,要根据情况来定;
      第一种情况:
      如果我们是要恢复数据到源数据库或者和源数据库有相同 GTID 信息的实例,那么就要使用该参数。如果不带该参数的话,是无法恢复成功的。因为包含的 GTID 已经在源数据库执行过了,根据 GTID 特性,一个 GTID 信息在一个数据库只能执行一次,所以不会恢复成功。

      # mysqlbinlog --skip-gtids=true mysql-bin.000012 |mysql -uroot -p
      或者

      # mysqlbinlog --skip-gtids=true mysql-bin.000012 > backup.sql
      mysql -uroot -p < backup.sql
      第二种情况&#xff1a;
      如果是恢复到其他实例的数据库并且不包含源实例的 GTID 信息&#xff0c;那么可以不使用该参数&#xff0c;使用或者不使用都可以恢复成功。


binlog的三种模式


  • Row level
    日志中会记录每一行数据被修改的情况&#xff0c;然后在slave端对相同的数据进行修改。
    优点&#xff1a;能清楚的记录每一行数据修改的细节
    缺点&#xff1a;数据量太大

  • Statement level&#xff08;默认&#xff09;
    每一条被修改数据的sql都会记录到master的bin-log中&#xff0c;slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql再次执行
    优点&#xff1a;解决了 Row level下的缺点&#xff0c;不需要记录每一行的数据变化&#xff0c;减少bin-log日志量&#xff0c;节约磁盘IO&#xff0c;提高新能
    缺点&#xff1a;容易出现主从复制不一致

  • Mixed&#xff08;混合模式&#xff09;
    结合了Row level和Statement level的优点


如何开启binlog

vim /etc/my.cnf(这个路径根据自己的安装查找吧)

[mysqld]
server_id&#61;1#5.7以上必须设置这个参数&#xff0c;否则重启服务会报错
log_bin &#61; mysql-bin#第二个参数是binlog日志的基本文件名&#xff0c;后面会追加标识来表示每一个文件&#xff0c;默认在data目录
binlog_format &#61; ROW
expire_logs_days &#61; 5#binlog过期时间&#xff0c;如果不配置&#xff0c;则永不过期
max_binlog_size &#61; 100M#单个binlog文件的大小&#xff0c;超过了该大小&#xff0c;自动切换到新的binlog文件

或者

log_bin&#61;ON#打开binlog日志
server_id&#61;1
log_bin_basename&#61;/var/lib/mysql/mysql-bin#binlog日志的基本文件名&#xff0c;后面会追加标识来表示每一个文件&#xff0c;如果没有配置&#xff0c;默认在data目录下
log_bin_index&#61;/var/lib/mysql/mysql-bin.index#binlog文件的索引文件&#xff0c;这个文件管理了所有的binlog文件的目录&#xff0c;如果没有配置&#xff0c;默认在data目录下

重启服务后即开启了binlog功能


binlog相关的命令

select &#64;&#64;log_bin#检查bin_log是否开启
select &#64;&#64;log_bin_basename#查看log_bin日志文件名前缀&#xff0c;MySQL5.5以下不支持
select &#64;&#64;log_bin_index#存放log_bin日志文件的索引文件&#xff0c;MySQL5.5以下不支持
reset master;#重置binlog&#xff0c;删除所有binlog
show master logs;#查看所有binlog
show master status;#查看master状态&#xff0c;即最后(最新)一个binlog日志的编号名称&#xff0c;及其最后一个操作事件pos结束点(Position)值
flush logs;#刷新log日志&#xff0c;自此刻开始产生一个新编号的binlog日志文件&#xff0c;每当mysqld服务重启时&#xff0c;会自动执行此命令&#xff0c;刷新binlog日志&#xff1b;在mysqldump备份数据时加 -F 选项也会刷新binlog日志&#xff1b;

sql_log_bin临时关闭binlog开关

sql_log_bin用来临时关闭binlog&#xff0c;仅仅对当前会话生效&#xff0c;如果在当前会话设置了这个参数&#xff0c;那么该会话中的增删改都不会记录到binlog日志中。


  1. 所以在主从复制最好不要轻易使用该参数。
  2. 如果对数据库利用binlog做了增量备份&#xff0c;也最好别轻易使用该参数&#xff0c;如果使用了会导致增量备份的数据不完整。
  3. 当然了&#xff0c;我们在对数据库进行恢复时&#xff0c;可以在相应的恢复会话中设置该参数&#xff0c;让恢复过程不走binlog&#xff0c;从而加快恢复速度。

set sql_log_bin&#61;0;#临时关闭当前会话的binlog
select &#64;&#64;session.sql_log_bin; #查询当前会话的sql_log_bin状态

binlog日志解析工具mysqlbinlog


  1. 不加任何参数

mysqlbinlog xxxxxxx001 xxxxxxx002
#后面可以跟多个binlog日志文件&#xff0c;利用这个特点我们可以将每个binlog日志文件的增量数据进行合并

在这里插入图片描述
2. 过滤指定数据库的binlog日志

mysqlbinlog -d test xxxxxx01 >test.sql

3.禁止恢复过程产生日志

mysqlbinlog mysqlbinlog -d test -D xxxxxx01 >test.sql
#或者----disable-log-bin

4.如果只想查看常规的SQL语句&#xff0c;而不需要其他内容&#xff0c;那么可以使用 -s 选项&#xff0c;如下所示。
也可以使用 --short-form 选项&#xff0c;效果相同。
在这里插入图片描述
5. 从远程服务器获取二进制日志
在这里插入图片描述


推荐阅读
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
author-avatar
mySi2502876237
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有