暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 先写binlog还是先落盘

原创 百分 2023-11-08
366

1. 概述
在介绍 mysql 先写 binlog 还是先落盘之前,我们先来了解一下 mysql 的基本工作流程。mysql 是一个开源的关系型数据库管理系统,通过执行 SQL 语句来完成对数据库的操作。当用户提交一条 SQL 语句到 mysql 服务器时,mysql 服务器会经过一系列的处理流程,最终将结果返回给用户。其中的一个重要步骤就是对数据的持久化保存,在 mysql 中,有两种方式可以实现数据的持久化保存,即先写 binlog 还是先落盘。

binlog 是 mysql 的二进制日志文件,记录了对数据库的修改操作,包括插入、更新、删除等。而落盘是指将数据写入磁盘文件,以保证数据的持久化保存。那么,mysql 先写 binlog 还是先落盘呢?这个问题的答案是先写 binlog。

2. 具体流程
下面是 mysql 先写 binlog 还是先落盘的具体流程:

步骤 描述
1 接收到用户提交的 SQL 语句
2 将 SQL 语句写入 binlog
3 执行 SQL 语句
4 将数据写入 redo log
5 将数据写入磁盘文件
3. 代码实现
步骤 1:接收到用户提交的 SQL 语句
在 mysql 中,可以通过客户端工具或者编程语言与 mysql 服务器进行通信,将 SQL 语句提交给 mysql 服务器。以下是使用 python 语言与 mysql 服务器进行通信的代码示例:

import pymysql

# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test')
cursor = conn.cursor()

# 执行 SQL 语句
sql = "SELECT * FROM users"
cursor.execute(sql)

# 获取结果
result = cursor.fetchall()
for row in result:
print(row)

# 关闭连接
cursor.close()
conn.close()

步骤 2:将 SQL 语句写入 binlog
mysql 会将用户提交的 SQL 语句写入 binlog 文件中,以记录对数据库的修改操作。以下是查看 binlog 文件的命令示例:

SHOW BINARY LOGS;
1.
步骤 3:执行 SQL 语句
mysql 服务器会根据接收到的 SQL 语句执行相应的操作,包括查询、插入、更新、删除等。以下是使用 python 语言执行 SQL 语句的代码示例:

import pymysql

# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test')
cursor = conn.cursor()

# 执行 SQL 语句
sql = "INSERT INTO users (name, age) VALUES ('Alice', 20)"
cursor.execute(sql)

# 提交事务
conn.commit()

# 关闭连接
cursor.close()
conn.close()

步骤 4:将数据写入 redo log
mysql 会将执行的 SQL 语句所修改的数据写入 redo log 文件中,以保证数据的持久化保存。以下是查看 redo log 文件的命令示例:

SHOW VARIABLES LIKE 'innodb_log_file%';
1.
步骤 5:将数据写入磁盘文件
最后,mysql 会将数据写入磁盘文件,以确保数据的持久化保存。以下是查看数据文件的命令示例:

SHOW VARIABLES LIKE 'datadir';
1.
4. 状态图
下面是 mysql 先写 binlog 还是先落盘的状态图:

接收到用户提交的
SQL
语句

语句写入
binlog
执行
将数据写入
redo
log
将数据写入磁

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论