美文网首页
mysql的bin_log

mysql的bin_log

作者: 东南枝下 | 来源:发表于2022-12-27 14:12 被阅读0次

    bin_log

    以事件形式记录了所有的DDL和DML语句
    可用于数据恢复和主从复制

    查看bin_log是否开启

    使用show variables like 'log_bin';

    图片.png
    可以看到我现在是关闭状态

    开启bin-log日志

    添加配置,由于我使用的是docker容器部署的mysql实例,所以需要进到到容器中

    docker exec -it mysql5.7 bin/bash
    
    // docker 中mysql配置文件目录
    cd /etc/mysql/mysql.conf.d/
    
    cat >>mysqld.cnf<<EOF
    > log-bin=mysql-bin
    > server-id=1
    > binlog_format=MIXED
    > expire_logs_days=3
    > max_binlog_size=100m
    > binlog_cache_size=10m
    > max_binlog_cache_size=512m
    > binlog_stmt_cache_size=100m
    > max_binlog_stmt_cache_size=100m
    > EOF
    
    
    • server-id
    • log-bin:日志保存位置,默认与表空间同一目录,也可指定路径(如:log_bin=/opt/data/mysql-bin)
    • binlog_format : binlog的格式,有三种:STATEMENTROWMIXED
      • STATEMENT : 每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如 sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
      • ROW : 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
      • MIXED : 以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
    • expire_logs_days : binlog过期清理时间,单位是天
    • max_binlog_size : binlog每个日志文件大小
    • binlog_cache_sizemax_binlog_cache_size : binlog缓存大小
    • binlog_stmt_cache_sizemax_binlog_stmt_cache_size : 发生事务时非事务语句的缓存的大小

    重启mysql,由于我用的是docker,重启容器就好


    图片.png

    常用命令

    show master logs : 查看所有binlog日志列表

    show master status : 查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值。

    flush logs : flush 刷新log日志,自此刻开始产生一个新编号的binlog日志文件;每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqlddump备份数据时加-F选项也会刷新binlog日志;

    reset master : 重置(清空)所有binlog日志

    查看bin_log

    进入bin_log日志目录,使用mysqlbinlog工具查看

    cd /var/lib/mysql
    
    mysqlbinlog mysql-bin.000001 
    

    在命令行界面查看

    show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
    
    • IN 'log_name':指定要查询的binlog文件名(不指定就是第一个binlog文件)
    • FROM pos:指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
    • LIMIT【offset】:偏移量(不指定就是0)
    • row_count :查询总条数(不指定就是所有行)

    例:show binlog events in 'mysql-bin.000001' from 298 LIMIT 0,1

    图片.png

    参考:https://blog.csdn.net/sinat_32430939/article/details/121533785
    https://blog.csdn.net/weixin_46415189/article/details/127387933
    https://blog.csdn.net/justlpf/article/details/82908740

    相关文章

      网友评论

          本文标题:mysql的bin_log

          本文链接:https://www.haomeiwen.com/subject/brzuqdtx.html