1、错误日志:
(1)查看日志地址
select @@log_error;
(2)更改日志地址
log_error=/tmp/mysql3306err.log
-----------------------------------------------------------------------------------------------------------------
2、二进制日志(binlog)
(0) 查看二进制日志开启状态
select @@sql_log_bin;
开启关闭日志(关闭当前会话,全局修改配置文件)
set sql_log_bin=1/0;
(1)主从要依赖二进制日志
(2)数据恢复时需要依赖二进制日志
(3)配置: 默认没有开启
server_id=6
log_bin=/data/binlog/mysql-bin 日志路径,创建/data/binlog 并给权限重启生效
给权限 chown -R mysql.mysql /data。 mysql-bin是文件名前缀
例如 mysql-bin.00001,mysql-bin.000002。mysql会自动生成
binlog_format=row 5.7默认配置,可以省略
sync_binlog=1 每次事务提交立即将binlog刷写到磁盘,双1标准其中一个1,另一个是innodb_flush_method
(4)记录的是数据库所有变更类的操作日志(DDL,DCL,DML)
(1)DDL/DCL: 记录的是原模原样的SQL语句
(2)DML:记录已提交的事务(statement、row、mixed)
通过binlog_format=row 控制,对DDL.DCL没有影响
(3)statement:SBR,语句模式记录日志,做什么命令,记录什么命令
可读性强,对于范围操作日志量小,但是可能会出现记录不准确的情况
(4)row: RBR,行模式,数据行的变化(redo 做的是数据页的变化)
可读性差,对于范围操作日志量大,但是数据不会出现记录错误
(5)mixed: MBR,混合模式,由Mysql决定用哪种模式
3、二进制文件的管理
(1)查看二进制文件地址
select @@log_bin_basename;
show variables like '%log_bin%';
(2)查看二进制模式
select @@binlog_format;
(3)查看二进制日志文件
show binary logs;
(4)滚动日志
flush logs;
reset master;清除所有日志,编号从1开始,开启了主从慎用,会崩
(5) 查看正在使用的日志文件
show master status;
(6)查看二进制事件
show binlog events in 'mysql-bin.000004';
mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000004 详情mysqlbinlog --help
(7)截取事件
mysqlbinlog --skip-gtids --start-position=219 --stop-position=578 mysql-bin.00004 通过开始和结束编号截取日志
mysqlbinlog --skip-gtids -d test mysql-bin.00004 截取test库下的所有日志
mysqlbinlog --skip-gtids --include-gtids='c1678cc2-270a-11eb-bd2e-000c29e32742:1-3' /data/binlog/mysql-bin.000007 >/tmp/gtids.sql 截图gtid编号的日志
(8)清除日志
手动清除
purge binary logs to 'mysql-bin.000010' 清除mysql-bin.000010之前的日志(不包括本条)
purge binary logs before '2020-11-16 22:05:00' 清除这个时间之前的日志
自动清除
expire_logs_days=15 保留15天的日志
------------恢复内容结束------------