bin_log
以事件形式记录了所有的DDL和DML语句
可用于数据恢复和主从复制
查看bin_log是否开启
使用show variables like 'log_bin';
可以看到我现在是关闭状态
开启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的格式,有三种:STATEMENT
,ROW
,MIXED
-
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_size
、max_binlog_cache_size
: binlog缓存大小- 如果事务中DML语句太多,该缓存配置又太小,则会报错
writing one row to the row-based binary log failed
,https://www.jianshu.com/p/b6ff026882c4
- 如果事务中DML语句太多,该缓存配置又太小,则会报错
-
binlog_stmt_cache_size
、max_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
参考: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
网友评论