mysql工具类日志(binlog、slowlog、errorlog)
mysql日志管理
参考https://www.jianshu.com/p/00c54d2832ed
日志设置
工具日志,不同于undo log(事务等)
错误日志(排错、主从错误)–log-error,默认打开,路径datadir/主机名.err,文本格式,重点关注[ERROR]
慢查询日志(优化)–slow_query_log、–long_query_time
二进制日志(主从)–log-bin、–expire-logs-days
目录授权chown -R mysql.mysql /tmp/{errlog,binlog}
一般会定制这些日志的路径,避免数据盘出错,日志也拿不到
查看错误日志路径:select @@log_error,默认应该在./主机名.err,我的在stderr
修改到mysql.mysql有权限的路径,在/etc/my.cnf的[mysqld]下添加log_error=自定义错误日志路径,如/tmp/errlog/mysql.err或mysql.log(自动创建文件),重启生效
二进制日志(binlog),sql层逻辑日志,记录sql语句操作,默认关闭
主从复制依赖binlog
数据恢复依赖binlog
开启,需要配置参数(/etc/my.cnf的[mysqld]),重启生效:
server_id= 主从复制用,但5.7开始,开启binlog需要配置server_id,1-65535
log_bin= 设置为1,打开binlog功能,生成在默认位置,也可以指定路径如/tmp/binlog/mysql-bin,会打开binglog功能,且按指定路径和名称前缀生存二进制日志,也可以单独设置log_bin和log_bin_basename参数
其中/tmp/binlog是路径,必须mysql.mysql有权限
mysql-bin是前缀,生成日志名称mysql-bin.000001,mysql-bin.000002等,mysql只能使用一个,关注编号最大那个,其他是历史文件(可以设置自动清除的策略),每次重启会生成并使用新的binlog,其中mysql-bin.index列出所有二进制日志文件名称,相当于索引
上面2给参数必须设置,下面可选,binlog_format=row,5.7版本默认配置就是row,可以不设置
innodb_flush_log_at_trx_commit=0:每秒一次将Log Buffer中数据写入到Log File中,并且Flush到磁盘。事务提交不会主动触发写磁盘操作。
innodb_flush_log_at_trx_commit=1:每次事务提交时将Log Buffer数据写入到Log File中,并且Flush到磁盘。
innodb_flush_log_at_trx_commit=2:每次事务提交时将Log Buffer数据写入到Log File中,但不立即Flush到磁盘,MySQL会每秒一次刷新到磁盘。
由于进程调度问题,每条一次操作不能保证每一秒都执行一次。
当innodb_flush_log_at_trx_commit=0时,最近一秒的事务日志存在MySQL的Log Buffer中,无论时MySQL实例停止还是MySQL服务器宕机,都会导致最近一秒的事务日志丢失。
当innodb_flush_log_at_trx_commit=1时,最近一秒的事务日志存在操作系统的文件缓存中,MySQL实例停止不会导致事务日志丢失,但MySQL服务器宕机会导致最近一秒事务日志丢失。
上述的一秒一次刷新,取决于参数innodb_flush_log_at_timeout默认值为1,DDL或其他InnoDB内部操作并不受参数innodb_flush_log_at_trx_commit的限制。
二进制日志概述
二进制日志记录:变更类操作日志,DML增删改(数据)、DDL(增删改表)、DCL(修改权限)
DDL和DCL(如建表create database 库名、alter、drop等),以语句的方式原样记录
DML语句(增删改),记录已提交的事务的SQL语句(未提交或回滚的事务不记录)&#x