MySQL8:cat /etc/my.cnf |grep log(CentOS)
Q:有些人可能疑惑了,为什么用show variables like 'log_bin';查询出来的结果和配置文件中不大一样啊?
PS:一般配置项中的参数都可以使用show variables like 'xx'来查询对应的值
A:那是因为5.7之后版本分成了两个参数:log_bin和log_bin_basename:
PS:配置文件的log_bin=xxx相当于命令中的log_bin和log_bin_basename
mysql> show variables like 'log_bin%'; +---------------------------------+-----------------------------+ | Variable_name | Value | +---------------------------------+-----------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/binlog | | log_bin_index | /var/lib/mysql/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+-----------------------------+ 5 rows in set (0.00 sec) 开启演示MariaDB开启binlog图示:(CentOS)
MySQL5.7演示:(UbuntuServer)
配置文件中修改:(show variables like 'binlog_format';:查看当前binlog基于什么格式)
# 服务器标识 server-id=1 # 单机MariaDB可不开启 # 开启binlog并设置路径 # 不指定路径则默认在数据目录下 log_bin=binlog # 这个代表以binlog开头的文件 # binlog采用ROW|MIXED格式 # binlog_format=MIXED # 5.7默认是ROW先看下文件前缀(log_bin=binlog)的概念,一张图就懂:
PS:如果log_bin只是指定一个名字,那么默认路径一般都是在数据文件的文件夹中
配置文件一般都会写,eg:datadir=http://www.likecs.com/var/lib/mysql,或者通过show variables like 'datadir';也可以查询到
虽然和SQLServer文件组不是一个概念,但有些相似 ==> log可以多个也可以动态调整
Q:虽然ROW记录能保证主从数据安全,但我们排查问题的时候往往需要知道SQL,而用段的记录方式又不合适,咋办?
A:有个新参数可以解决:binlog_rows_query_log_events,开启后就可以记录sql了
查看方式:show variables like 'binlog_row%';
mysql> show variables like 'binlog_row%'; +------------------------------+-------+ | Variable_name | Value | +------------------------------+-------+ | binlog_row_image | FULL | | binlog_rows_query_log_events | OFF | +------------------------------+-------+ 2 rows in set (0.01 sec) binlog演示显示binlog列表:show binary logs;
刷新一份新的binlog:flush logs;(现在开始的二进制日志就记录在这个新文件中)
binlog现在是空的:(-vv:把二进制格式的日志显示为能读懂的字符串)
mysqlbinlog --no-defaults -vv --base64-output=DECODE-ROWS /var/lib/mysql/binlog.000006
现在简单摸拟几个SQL操作,然后看看binlog: