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

相关推荐
Estar.Lee34 分钟前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
找藉口是失败者的习惯1 小时前
从传统到未来:Android XML布局 与 Jetpack Compose的全面对比
android·xml
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Jinkey2 小时前
FlutterBasic - GetBuilder、Obx、GetX<Controller>、GetxController 有啥区别
android·flutter·ios
无敌岩雀3 小时前
MySQL中的索引
数据库·mysql
东阳马生架构3 小时前
MySQL原理简介—1.SQL的执行流程
mysql
安迁岚4 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel4 小时前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql