MySQL的日志学习总结

发布时间 2023-04-16 19:12:46作者: 与时具进&不忘初心

1、Mysql的安装

这里使用tar包的方式
	https://www.cnblogs.com/hanshuixin/articles/16887899.html
初始的默认密码: 
        tail -200f alert.log
        localhost@root: 后面的内容,就是本机root用户的初始密码,需要记录下来 *<!ckp29Ne=&

 2、错误日志

错误日志是MySQL 中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志
该日志时默认开启的,默认存放目录 /var/log,默认的日志文件名是 mysqld.log。可以通过以下的命令来看日志位置
show variables like "%log_error%"

 3、二进制日志

定义
  	二进制日志binlog 记录了所有DDL语句和DML语句,但不包括数据查询(select show)语句
作用
  	1、灾难时的数据恢复
  	2、MySQL的主从复制时用到
查看是否开启二进制日志
  	show variables like "%log_bin%";
   	看到是否开启binlog 日志
        #my.cnf中 加如下的内容
	   log-bin=mysql-bin
	  server_id=1
	  binlog_format=ROW


docker 安装mysql 5.7 开启binlog
 	docker run --name mysql -p 3306:3306 -v /Users/gaoheqiang/mysqlconf/mysqlconf/my.cnf:/etc/mysql/my.cnf -v /Users/gaoheqiang/mysqlconf/data:/var/lib/mysql -v /Users/gaoheqiang/mysqlconf/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root --restart=always -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 
日志格式
  	STATEMENT
   		基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中
  	ROW
   		基于行的日志记录,记录的是每一行的数据变更(执行了一个update 语句,update 语句影响了 5行,binlog 日志记录的是每一行数据变更前的数据,变更后的数据信息)
 	MIXED
   		没啥用
查看日志格式
   	show variables like "%binlog_format%";
日志内容查看
   	msyqlbinlog 配置环境变量 
   		vi ~/.bash_profile
   		export PATH=$PATH:/usr/local/mysql/bin
   		source ~/.bash_profile
   	产看日志内容
   		mysqlbinlog -d mybatis -v mysql-bin.000001 
	   	-v 把行事件 重构为SQL语句
	   	-d 指定数据库名称,只列出指定的数据库相关操作

二进制日志删除
  对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量的磁盘空间。
  reset master 删除全部 binlog日志。删除之后日志编号将从 000001开始
  purge master logs to binlog .***** 删除*****编号之前的所有日志
  purge master logs before 'yyyy-mm-dd hh mm ss' 删除日志为 某个日期之前 的 binlog日志

  这个命令需要在mysql客户端执行。

  MySQL 5.7 配置二进制日志的过期时间 重启生效

    expire_logs_days=30 

    

 4、查询日志

查询日志中记录了客户端的所有操作语句,默认情况下查询日志时未开启的。
	show variables like '%general%'
开启查询日志
	/etc/my.cnf 添加如下的内容
		general_log_file=/usr/local/mysql/log/general.log
		general_log=1
	重启mysql
		service mysqld restart