MySQL 有哪些重要的日志文件?
① 错误日志
用来记录 MySQL 服务器运行过程中的错误信息,默认开启无法关闭.
复制环境下,从服务器进程的信息也会被记录进错误日志
删除过期信息
默认情况下,错误日志是存储在数据库的数据文件目录中,名称为 hostname.err,其中 hostname 为服务器主机名。在 MySQL 5.5.7 之前,数据库管理员可以删除很长时间之前的错误日志,以节省服务器上的硬盘空间, MySQL 5.5.7 之后,服务器将关闭此项功能,只能使用重命名原来的错误日志文件,手动冲洗日志创建一个新的,命令为:
mv hostname.err hostname.err.old mysqladmin flush-logs
② 查询日志
查询日志里面记录了数据库执行的所有命令,不管语句是否正确,都会被记录,具体原因如下:
- insert 查询为了避免数据冲突,如果此前插入过数据,当前插入的数据如果跟主键或唯一键的数据重复那肯定会报错;
- update 时也会查询因为更新的时候很可能会更新某一块数据;
- delete 查询,只删除符合条件的数据;
因此都会产生日志,在并发操作非常多的场景下,查询信息会非常多,那么如果都记录下来会导致 IO 非常大,影响 MySQL 性能,因此如果不是在调试环境下,是不建议开启查询日志功能的。
查询日志模式是关闭的,可以通过以下命令开启查询日志:
set global generallog=1 set global logoutput=‘table’;
general_log=1 为开启查询日志,0 为关闭查询日志,这个设置命令即时生效,不用重启 MySQL 服务器。
④ redo log(重做日志)一种缓存机制
是什么:为了最大程度的避免数据写入时,因为 IO 瓶颈造成的性能问题
怎么办:先将数据写入内存中,再批量把内存中的数据统一刷回磁盘。为了避免将数据刷回磁盘过程中,因为掉电或系统故障带来的数据丢失问题,InnoDB 采用 redo log 来解决此问题。
⑤ undo log(回滚日志)类似ctrl+z 撤销
是什么
用于存储日志被修改前的值,从而保证如果修改出现异常,可以使用 undo log 日志来实现回滚操作。
怎么做:
undo log 和 redo log 记录物理日志不一样,它是逻辑日志,可以认为当 delete 一条记录时,undo log 中会记录一条对应的 insert 记录,反之亦然,当 update 一条记录时,它记录一条对应相反的 update 记录,当执行 rollback 时,就可以从 undo log 中的逻辑记录读取到相应的内容并进行回滚