MySQL与Oracle一样都是通过逻辑存储结构来管理物理存储结构,即管理硬盘上存储的各种文件。下面将详细介绍InnoDB存储引擎中的撤销日志文件和错误日志文件。
一、MySQL的撤销日志文件(undo log)
undo log中记录的是旧版本的数据,当我们对记录做了变更操作时就会产生undo记录。当一个旧的事务需要读取数据时,为了能读取到老版本的数据,需要顺着undo链找到满足其可见性的记录。
视频讲解如下:
从MySQL8.0版本开始,MySQL默认对undo进行了分离操作。也就是说,不需要在初始化中手动配置参数,默认会在MySQL数据目录下生成两个10兆大小的undo表空间文件“undo_001” 和 “undo002” 并且可以在线的增加和删除undo表空间文件进行动态扩容和收缩。
[root@mysql11 data]# pwd /usr/local/mysql/data [root@mysql11 data]# ll undo_00* -rw-r-----. 1 mysql mysql 10485760 Feb 20 20:11 undo_001 -rw-r-----. 1 mysql mysql 10485760 Feb 20 20:11 undo_002
二、MySQL错误日志文件
类似Oracle的告警日志,MySQL的错误日志文件对MySQL的启动、运行、关闭过程中出现的问题进行了记录。执行下面的语句查看MySQL的错误日志:
mysql> show variables like 'log_error'; # 输出的信息如下: +---------------+---------------------------------+ | Variable_name | Value | +---------------+---------------------------------+ | log_error | /usr/local/mysql/data/error.log | +---------------+---------------------------------+
视频讲解如下:
下面我们通过一个简单的例子来说明如何使用错误日志。
(1)创建一个新的数据库,并在数据库中创建一张表
mysql> create database testdb; mysql> use testdb; mysql> create table t1(c1 int);
(2)删除数据库testdb对应的目录
cd /usr/local/mysql/data/ rm -rf testdb/
(3)重启MySQL
systemctl restart mysqld
(4)查看错误日志文件
vi /usr/local/mysql/data/error.log # 错误日志中将包含下面的信息: Tablespace 2, name 'testdb/t1', file './testdb/t1.ibd' is missing!