Mysql update 语句的执行流程,binlog 的作用和几种格式 
时间: 2023-03-12 08:07:17 浏览: 33
MySQL 的 UPDATE 语句的执行流程:首先,MySQL 将执行 UPDATE 语句的原始查询编译成内部的数据结构,然后检查安全性,其次,MySQL 执行检索与更新操作,最后,MySQL 执行 binlog 日志记录,以实现一致性。Binlog 是二进制日志的简称,它是MySQL服务器用来记录数据变更的日志文件,其中包含了MySQL服务器中所有数据变更操作的记录,这些操作按照时间顺序记录在binlog文件中,用来实现数据库的数据一致性和容灾备份。MySQL的binlog文件支持三种格式,分别是 STATEMENT、ROW 和 MIXED。
相关问题
mysql redolog和binlog区别
MySQL的redolog和binlog都是用于保证数据一致性和恢复的机制。
redolog主要是用于事务的,记录的是InnoDB存储引擎的事务操作,如insert、update、delete等操作。红色日志是InnoDB自己独立维护的,只在内存中运行,也叫事务日志。在崩溃恢复时,InnoDB根据这个日志把数据重做一遍,在主从同步时也可以使用redolog。
binlog则是MySQL的二进制日志,将SQL语句记录下来,主要是用于记录SQL语句的执行顺序。二进制日志适合做主从复制,主库将日志传递给从库进行执行。从库执行时,相当于对主库跑了一遍这些SQL语句。
所以,redolog是记录数据修改信息,而binlog是记录SQL语句执行信息。
MySQL binlog 恢复数据案例
下面是一个MySQL binlog恢复数据的案例,假设我们有一个名为`testdb`的数据库,里面有一张名为`testtable`的表,我们需要恢复这张表在某个时间点之前的数据。
1. 首先,我们需要确认我们的MySQL实例已经开启了binlog日志,并且我们可以使用`mysqlbinlog`命令来查看binlog日志文件的内容。
2. 然后,我们需要找到我们需要恢复的时间点之前的最近一个binlog日志文件,可以通过以下命令查看:
```
SHOW BINARY LOGS;
```
3. 找到我们需要恢复的时间点之前的最近一个binlog日志文件后,可以使用以下命令查看该文件的内容:
```
mysqlbinlog /var/lib/mysql/binlog.000001
```
这将会输出该文件的所有binlog日志内容。
4. 接下来,我们需要找到我们需要恢复的那条SQL语句在binlog日志中的位置,可以使用以下命令来查找:
```
mysqlbinlog /var/lib/mysql/binlog.000001 | grep -B 2 "UPDATE testdb.testtable SET"
```
这将会输出所有包含`UPDATE testdb.testtable SET`的SQL语句,并且输出每条SQL语句的前两行,方便我们确认该SQL语句在binlog日志中的位置。
5. 确认了需要恢复的SQL语句在binlog日志中的位置后,我们可以使用以下命令来恢复该SQL语句:
```
mysqlbinlog /var/lib/mysql/binlog.000001 --start-position=123456 | mysql -u root -p testdb
```
其中,`--start-position`参数指定了需要恢复的SQL语句在binlog日志中的位置,`testdb`是我们需要恢复数据的数据库名。
6. 最后,我们可以使用`SELECT`语句来确认数据已经成功恢复:
```
SELECT * FROM testdb.testtable;
```
如果数据已经成功恢复,这条`SELECT`语句将会返回我们需要恢复的数据。
相关推荐







