热门标签 | 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. 从远程服务器获取二进制日志
在这里插入图片描述


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
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社区 版权所有