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

相关推荐
luoluoal17 分钟前
基于python的小区监控图像拼接系统(源码+文档)
python·mysql·django·毕业设计·源码
stella·1 小时前
mysql的时区问题
数据库·mysql·timezone·时区
夏沫琅琊1 小时前
Android 各类日志全面解析(含特点、分析方法、实战案例)
android
程序员JerrySUN2 小时前
OP-TEE + YOLOv8:从“加密权重”到“内存中解密并推理”的完整实战记录
android·java·开发语言·redis·yolo·架构
TeleostNaCl3 小时前
Android | 启用 TextView 跑马灯效果的方法
android·经验分享·android runtime
残雪飞扬3 小时前
MySQL 8.0安装
数据库·mysql
一只鹿鹿鹿3 小时前
网络信息与数据安全建设方案
大数据·运维·开发语言·网络·mysql
么么...4 小时前
深入理解数据库事务与MVCC机制
数据库·经验分享·sql·mysql
TheNextByte14 小时前
Android USB文件传输无法使用?5种解决方法
android
quanyechacsdn5 小时前
Android Studio创建库文件用jitpack构建后使用implementation方式引用
android·ide·kotlin·android studio·implementation·android 库文件·使用jitpack