【MySQL】innodb_flush_log_at_trx_commit=1,是干什么的?底层原理是什么?

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【MySQL】innodb_flush_log_at_trx_commit=1,是干什么的?底层原理是什么?

在MySQL中,事务的提交过程需要写入事务日志(也称为redo日志)和数据页。innodb_flush_log_at_trx_commit是InnoDB存储引擎的一个参数,它决定了事务提交时日志缓冲区的刷写策略。

当innodb_flush_log_at_trx_commit=1时,表示每次事务提交都会将事务日志写入磁盘,这样可以保证事务的持久性,即使发生系统崩溃或意外断电,数据也不会丢失。这是默认值,也是最安全的设置,但同时也会影响性能,因为每次提交都需要等待写入磁盘。

当innodb_flush_log_at_trx_commit=0时,表示事务提交时不会立即将日志写入磁盘,而是先写入到日志缓冲区,等待后续的批量刷盘操作。这种设置可以提高性能,但是会降低数据持久性,如果系统崩溃或断电,可能会丢失一部分数据。

当innodb_flush_log_at_trx_commit=2时,表示事务提交时会将事务日志写入操作系统的页缓存,但并不保证立即写入磁盘,而是等待操作系统刷盘,这种设置可以提高性能,同时也会减少日志磁盘I/O,但是在操作系统崩溃或意外断电的情况下,可能会丢失一部分数据。

因此,可以根据具体的业务需求和系统性能要求来设置innodb_flush_log_at_trx_commit参数,以达到数据持久性和性能的平衡。

相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
9天前
|
存储 关系型数据库 MySQL
|
9天前
|
存储 SQL 关系型数据库
|
10天前
|
存储 关系型数据库 MySQL
|
10天前
|
存储 关系型数据库 MySQL
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
|
4天前
|
SQL 安全 关系型数据库
MySQL的binlog日志的简介与查看
MySQL的binlog日志的简介与查看
19 4
|
5天前
|
关系型数据库 MySQL 数据库
MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)
MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)
16 2
|
6天前
|
存储 关系型数据库 MySQL
|
10天前
|
SQL 运维 关系型数据库
|
10天前
|
存储 关系型数据库 MySQL
|
10天前
|
关系型数据库 MySQL 数据挖掘
MySQL窗口函数:原理和使用
MySQL窗口函数:原理和使用