mysql binlog

binlog日志介绍

  1. 什么是 binlog

    binlog是server层共有的,是记录的数据更新历史,主要用来做主从同步和数据的实时备份。

  2. binlog 怎么开启

    mysql的配置文件添加相关配置并重启mysql

    powershell 复制代码
    # 1. linux打开mysql配置文件
    vi /etc/my.cnf
    sql 复制代码
    # 2. 添加binlog配置
    [mysqld]
    server_id=2 #mysql5.7版本开启binlog强制需要添加该参数
    log_bin = mysql-bin #表示开启binlog并指定binglog文件名
    binlog_format = MIXED #默认
    expire_logs_days = 7 #binlog保留天数
    powershell 复制代码
    # 3. 重启mysql
    systemctl restart mysqld.service
  3. binlog的内容

    3.1) binlog_format = ROW ,这种模式记录的是每条数据修改的细节。对于批量插入的数据,是以一条一条的insert语句保存,所以ROW模式的binlog文件会很大。

    sql 复制代码
    insert into k_order.`user`(`name`,`number`,`age`) values( '王五', '2545214198902140145',20),( '赵六', '2545214198902140145',20);

    3.2) binlog_format = STATEMENT,这种模式记录的就是sql原语句,对于一些公式字段可能会有问题。

    sql 复制代码
    insert into k_order.`user`(`name`,`number`,`age`,update_time) values( '刘7', '2545214198902140145',20,NOW()),( '陈8', '2545214198902140145',20,NOW());

    3.3) binlog_format = MIXED,会解析sql语句,对于批量插入采用statement模式,对于一些公式字段采用的是row模式。

    sql 复制代码
    insert into k_order.`user`(`name`,`number`,`age`,update_time) values( '刘7', '2545214198902140145',20,NOW()),( '陈8', '2545214198902140145',20,NOW());
    insert into k_order.`user`(`name`,`number`,`age`) values( '郑9', '2545214198902140145',20);
  4. binlog的常见操作

    sql 复制代码
    -- 查看binlog的配置
    show variables like '%log_bin%'
    -- 查看当前生成了那些binlog日志
    show binary logs; //等价于show master logs;
    show master status;
    -- 查看binlog event
    show binlog events;
    show binlog events in 'mysql-bin.000001';
    shell 复制代码
    ## 将binlog日志解析成sql文件 -v:解析行语句
    mysqlbinlog -v mysql-bin.000001  > aa.sql
    mysqlbinlog -vv mysql-bin.000001  > bb.sql
    mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000001 > cc.sql
    
    # 查看binlog日志文件内容
    mysqlbinlog "mysql-bin.000001" 
    
    # 把binlog日志文件转存为sql文件(建议)
    mysqlbinlog "mysql-bin.000001" > "test.sql"
    
    # 按指定时间恢复数据
    mysqlbinlog --start-datetime="2020-04-25 18:00:00" --stop-datetime="2020-04-26 00:00:00" mysqlbinlog.000002 | mysql -uroot -p1234
    
    # 按事件位置号恢复数据
    mysqlbinlog --start-position=154 --stop-position=957 mysqlbinlog.000002| mysql -uroot -p1234
  5. 注意

    binlog的备份不是全量备份,binlog保存的只是从binlog开启之时的增量数据。

    如果在启用binlog之前数据库已经存在数据,那么需要用mysqldump命令先把已经存在的数据进行备份并迁移到从库,这样基于binlog的主从复制才能保证是全量的。

相关推荐
墨理学AI8 分钟前
一文学会一点python数据分析-小白原地进阶(mysql 安装 - mysql - python 数据分析 - 学习阶段梳理)
python·mysql·数据分析
爱装代码的小瓶子12 分钟前
【C++与Linux基础】进程间通讯方式:匿名管道
android·c++·后端
洛豳枭薰17 分钟前
MySQL 并行复制
数据库·mysql
纤纡.18 分钟前
Linux 下 MySQL 数据类型与约束:第三章核心表格归纳与实战应用
linux·mysql
兴趣使然HX22 分钟前
Android绘帧流程解析
android
czlczl2002092529 分钟前
增删改查时如何提高Mysql与Redis的一致性
数据库·redis·mysql
打工的小王29 分钟前
MySql(二)索引
数据库·mysql
穿过锁扣的风35 分钟前
从数据操作到表结构管理:MySQL Shell 与 SQL 核心操作全解析
adb
luoluoal1 小时前
基于python的医疗问句中的实体识别算法的研究(源码+文档)
python·mysql·django·毕业设计·源码
怣501 小时前
MySQL子查询实战指南:数据操作(增删改查)与通用表达式
数据库·chrome·mysql