MySQL与Oracle一样都是通过逻辑存储结构来管理物理存储结构,即管理硬盘上存储的各种文件。下面将详细介绍InnoDB存储引擎中的撤销日志文件和错误日志文件。
一、MySQL的撤销日志文件(undo log)
undo log中记录的是旧版本的数据,当我们对记录做了变更操作时就会产生undo记录。当一个旧的事务需要读取数据时,为了能读取到老版本的数据,需要顺着undo链找到满足其可见性的记录。
视频讲解如下:
https://www.bilibili.com/video/BV1t7YWesEzP/?aid=112923498254...
从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 |
+---------------+---------------------------------+
视频讲解如下:
https://www.bilibili.com/video/BV1vHYeeaEeT/?aid=112931719089...
下面我们通过一个简单的例子来说明如何使用错误日志。
(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!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。