TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 数据库
  3. 正文

MySQL二进制日志怎么理解

2023年11月16日 871点热度 0人点赞 0条评论

二进制日志(备份)

  • 记录导致数据改变或潜在导致数据改变的SQL语句

  • 记录已提交的日志

  • 不依赖于存储引擎类型

    功能:通过“重放”日志文件中的事件来生成数据副本

    注意:建议二进制日志和数据文件分开存放

  • 二进制日志记录三种格式

    1. 基于“语句”记录:statement,记录语句,默认模式( MariaDB 10.2.3 版本以下 ),日志量较少

    2. 基于“行”记录:row,记录数据,日志量较大,更加安全,建议使用的格式

    3. 混合模式:mixed, 让系统自行判定该基于哪种方式进行,默认模式( MariaDB 10.2.4及版本以上)

  • 格式配置

    MariaDB [hellodb]> show variables like 'binlog_format';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | binlog_format | MIXED |
    +---------------+-------+
    1 row in set (0.001 sec)
    #MySQL 8.0 默认使用ROW方式
    mysql> show variables like 'binlog_format';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | binlog_format | ROW  |
    +---------------+-------+
    1 row in set (0.07 sec)
  • 二进制日志文件的构成

    有两类文件
    1.日志文件:mysql|mariadb-bin.文件名后缀,二进制格式,如: mariadb-bin.000001
    2.索引文件:mysql|mariadb-bin.index,文本格式
  • 二进制日志相关的服务器变量:

    MariaDB [hellodb]> sql_log_bin=ON|OFF:#是否记录二进制日志,默认ON,支持动态修改,系统变量,而非服务器选项
    ​
    log_bin=/PATH/BIN_LOG_FILE:#指定文件位置;默认OFF,表示不启用二进制日志功能,上述两项都开启才可以
    binlog_format=STATEMENT|ROW|MIXED:#二进制日志记录的格式,默认STATEMENT
    max_binlog_size=1073741824:#单个二进制日志文件的最大体积,到达最大值会自动滚动,默认为1G
    #说明:文件达到上限时的大小未必为指定的精确值
    binlog_cache_size=4m #此变量确定在每次事务中保存二进制日志更改记录的缓存的大小(每次连接)
    max_binlog_cache_size=512m #限制用于缓存多事务查询的字节大小。
    sync_binlog=1|0:#设定是否启动二进制日志即时同步磁盘功能,默认0,由操作系统负责同步日志到磁盘
    expire_logs_days=N:#二进制日志可以自动删除的天数。 默认为0,即不自动删除
  • 二进制日志相关配置 查看mariadb自行管理使用中的二进制日志文件列表,及大小

    SHOW {BINARY | MASTER} LOGS
  • 查看使用中的二进制日志文件

    SHOW MASTER STATUS
  • 在线查看二进制文件中的指定内容

    SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
  • 范例:

    show binlog events in 'mysql-bin.000001' from 6516 limit 2,3
  • mysqlbinlog:二进制日志的客户端命令工具,支持离线查看二进制日志 命令格式:

    mysqlbinlog [OPTIONS] log_file…
        --start-position=# 指定开始位置
        --stop-position=#
        --start-datetime=  #时间格式:YYYY-MM-DD hh:mm:ss
        --stop-datetime=
        --base64-output[=name]
        -v -vvv
  • 范例:

    mysqlbinlog --start-position=678 --stop-position=752 /var/lib/mysql/mariadb-bin.000003 -v
    mysqlbinlog  --start-datetime="2018-01-30 20:30:10"  --stop-datetime="2018-01-30 20:35:22" mariadb-bin.000003 -vvv
  • 二进制日志事件的格式:

    # at 328
    #151105 16:31:40 server id 1 end_log_pos 431  Query  thread_id=1  
    exec_time=0   error_code=0
    use `mydb`/*!*/;
    SET TIMESTAMP=1446712300/*!*/;
    CREATE TABLE tb1 (id int, name char(30))
    /*!*/; 
    事件发生的日期和时间:151105 16:31:40
    事件发生的服务器标识:server id 1
    事件的结束位置:end_log_pos 431
    事件的类型:Query
    事件发生时所在服务器执行此事件的线程的ID:thread_id=1
    语句的时间戳与将其写入二进制文件中的时间差:exec_time=0
    错误代码:error_code=0
    事件内容:
    GTID:Global Transaction ID,mysql5.6以mariadb10以上版本专属属性:GTID
  • 清除指定二进制日志

    PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
  • 范例:

    PURGE BINARY LOGS TO 'mariadb-bin.000003'; #删除mariadb-bin.000003之前的日志
    PURGE BINARY LOGS BEFORE '2017-01-23';
    PURGE BINARY LOGS BEFORE '2017-03-22 09:25:30';
  • 删除所有二进制日志,index文件重新记数

    RESET MASTER [TO N]; #删除所有二进制日志文件,并重新生成日志文件,文件名从#开始记数,默认从1开始,一般是master主机第一次启动时执行,MariaDB 10.1.6开始支持TO #
  • 切换日志文件:

    FLUSH LOGS;
  • 范例:

    [root@master ~]#file /var/lib/mysql/mariadb-bin.000001/var/lib/mysql/mariadb-bin.000001: MySQL replication log, server id 18 MySQLV5+, server version 10.3.17-MariaDB-log
标签: 暂无
最后更新:2023年11月17日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号