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的主从复制才能保证是全量的。

相关推荐
繁依Fanyi1 小时前
Animaster:一次由 CodeBuddy 主导的 CSS 动画编辑器诞生记
android·前端·css·编辑器·codebuddy首席试玩官
奔跑吧 android3 小时前
【android bluetooth 框架分析 02】【Module详解 6】【StorageModule 模块介绍】
android·bluetooth·bt·aosp13·storagemodule
田一一一6 小时前
Android framework 中间件开发(三)
android·中间件·framework·jni
学地理的小胖砸9 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
数据库幼崽10 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
betazhou11 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
androidwork11 小时前
掌握 Kotlin Android 单元测试:MockK 框架深度实践指南
android·kotlin
田一一一11 小时前
Android framework 中间件开发(二)
android·中间件·framework
追随远方12 小时前
FFmpeg在Android开发中的核心价值是什么?
android·ffmpeg
喝醉的小喵12 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁