使用mysql数据库的binlog应对故障

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【6月更文挑战第1天】本文介绍`mysql的 binlog`工具用于解析MySQL的二进制日志,转换为可执行的SQL语句,主要用于数据库主从复制和增量恢复。定期备份和binlog推送能实现故障时的数据恢复。

1 简介数据库日志

mysql自带的mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在MySQL数据库里执行的SQL语句。

binlog日志原始数据是以二进制形式存在的,需要使用mysqlbinlog工具转换成SQL语句形式。

mysql的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新内容的记录(对数据库进行改动的操作)。

对数据库查询的语句如show,select开头的语句,不会被binlog日志记录,主要用于数据库的主从复制与及增量恢复。

question_ans.png

binlog记录增删改操作,不记录查询语句。存在三种模式:

   SQL语句复制(可能造成主从不一致)、
   行复制(保证数据相同但日志量大)、
   混合复制(结合两者优点)。

启用和配置binlog涉及设置log_binserver-id等参数,并可通过

   `SHOW VARIABLES LIKE 'log_%`等命令检查状态。

2 三个模式

3种binlog日志模式:

  • 基于 SQL 语句的复制:

    每一条更新的语句 (insert、update、delete)都会记录在 binlog 中,进而同步到从库的 relaylog 中,被从库的 SQL 线程取出来,回放执行。

优点是 binlog 的日志量可能会比较少,
比如一个涉及行数为 1000 行的 update 语句,同步这一个语句,就同步了 1000行的数据。

缺点是同步的 SQL 语句里如果含有绑定本地变量的函数、关键字时,可能造成主从不一致的情况。
比如 SQL 语句中有 time 函数,如果主从数据库的服务器时间不是精确相等,就会造成结果不一致。

  • 基于行的复制:

不记录 SQL 语句,只记录了哪个记录更新前和更新后的数据,可以保证主从之间数据绝对相同。

缺点是:1条 SQL 更新 1000行的数据无法再偷懒,必须原原本本同步 1000 行的数据量

  • 混合复制:

    以上两种模式的混合,选取两者的优点。对于有绑定本地特性、评估可能造成主从不一致的 SQL 语句,

自动选用基于行的复制其他的选择基于 SQL 语句的复制读写分离:

设置不同的主/从数据库分别负责不同的操作,让主数据库负责数据的写操作,
从数据库负责数据的读操作,通过角色分担的策略,分别提升读写性能,有效减少数据并发操作的延迟,
  • 分表:

分表,也叫分片,可以提升数据库并发以及 I/O 的性能。分表重在单个实例内部,将一张大表分成若干小表,业务同时访问多个表。

  • 分库:

分库是将原本存放在一个实例上众多分类的数据(表) ,分开存放到不同的实例上。有利于差异化管理

3 常用binlog查看方式

  • 查询是否开启binlog

    SHOW VARIABLES like 'log_%';

    返回:

    Variable_name, Value

    'log_bin', 'ON'

  • 查看mysql的 binlog 模式

    show global variables like "binlog%";

    返回:

    Variable_name, Value

    'binlog_annotate_row_events', 'ON'
    'binlog_cache_size', '32768'
    'binlog_checksum', 'CRC32'
    'binlog_commit_wait_count', '0'
    'binlog_commit_wait_usec', '100000'
    'binlog_direct_non_transactional_updates', 'OFF'
    'binlog_file_cache_size', '16384'
    'binlog_format', 'MIXED'
    'binlog_optimize_thread_scheduling', 'ON'
    'binlog_row_image', 'FULL'
    'binlog_stmt_cache_size', '32768'

    其中,'binlog_format', 'MIXED' MIXED 即是 混合复制 模式。

    查看日志开启状态 完整的信息

      SHOW VARIABLES like 'log_%';
    

    查binlog日志列表

      show master logs
    

    查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点

      # File, Position, Binlog_Do_DB, Binlog_Ignore_DB
      'mysql-bin.000006', '844074', '', ''
    

    刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果

      flush logs
    

    清空所有binlog日志

      reset master
    

    使用mysql自带工具打开binlog文件,将二进制文件转换为可读sql语句

      mysqlbinlog mysql-bin.000006
    

或者 不使用默认字符

   mysqlbinlog --no-defaults mysql-bin.000001

binlog查询指令

    show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

IN : ‘log_name’ 指定要查询的binlog文件名(不指定就是第一个binlog文件)

FROM pos : 指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)

LIMIT [offset,] : 偏移量(不指定就是0)

row_count : 查询总条数(不指定就是所有行)

4 启用和恢复的方式

开启binlog

修改文件: /etc/my.cnf

1 第一种方式:

  • 开启binlog日志

      log_bin = ON
    
  • binlog日志的基本文件名

      log_bin_basename = /var/lib/mysql/mysqlbinlog
    
  • binlog文件的索引文件,管理所有binlog文件

      log_bin_index = /var/lib/mysql/mysql-bin.index
    
  • 配置serverid

      server-id = 1
    
  • 设置字符格式

      default-character-set=utf8
      改为:
      character-set-server = utf8
    

    2 方式二:

  • 设置log_bin

此一行等同于上面log_bin三行,这里可以写绝对路径,也可以直接写mysql-bin(后者默认就是在/var/lib/mysql目录下)

       log_bin = /var/lib/mysql/mysqlbinlog
  • 配置serverid

      server-id = 1
    

3 简单设置:

    log-bin = /data/3336/mysql-bin  
    binlog_format="STATEMENT"  
    #binlog_format="ROW"  
    #binlog_format="MIXED" 

不重启,使配置在msyql中生效

    SET global binlog_format='STATEMENT';

5 小结

在对数据库进行定时备份时,只能备份到某个时间点,假如在凌晨0点进行全备了,但是在中午12点出现故障需要恢复数据,定时备份0点以后的数据就只能丢失吗?

这时就是体现binlog日志重要性的时候了,当我们对binlog日志进行定时推送(一分钟一次或五分钟一次,时间频率视业务场景而定)就完成增量备份。

当出现故障时,可以使用定时备份和增量备份恢复到故障点时刻的数据。具体的恢复方案,后续章节再进行介绍。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
16天前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
51 6
|
2月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
152 9
|
7月前
|
SQL 关系型数据库 数据库
【YashanDB知识库】OM仲裁节点故障后手工切换方案和yasom仲裁重新部署后重新纳管数据库集群方案
本文介绍了主备数据库集群的部署、OM仲裁故障切换及重新纳管的全过程。首先通过解压软件包并调整安装参数完成数据库集群部署,接着说明了在OM仲裁故障时的手动切换方案,包括关闭自动切换开关、登录备节点执行切换命令。最后详细描述了搭建新的yasom仲裁节点以重新纳管数据库集群的步骤,如生成配置文件、初始化进程、执行托管命令等,确保新旧系统无缝衔接,保障数据服务稳定性。
|
3月前
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
120 10
|
5月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
212 23
|
8月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
637 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
6月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
7月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
146 16
|
7月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
112 4
|
7月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
848 0

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多