面试题答案
一键面试常见事件格式及用途
- WRITE_ROWS_EVENT
- 用途:用于记录插入操作。当执行
INSERT
语句向表中插入新数据行时,会生成该事件。它记录了插入到表中的具体数据行内容,包括各个列的值。通过记录这些信息,在主从复制过程中,从库可以根据该事件将相同的数据插入到对应的表中,保证主从数据一致性。例如,在主库执行INSERT INTO users (name, age) VALUES ('John', 25)
,WRITE_ROWS_EVENT
会记录这些插入的值,以便从库进行同步。
- 用途:用于记录插入操作。当执行
- DELETE_ROWS_EVENT
- 用途:用于记录删除操作。当执行
DELETE
语句从表中删除数据行时,此事件被生成。它记录了被删除行的相关信息,虽然不一定记录所有列的值,但会包含足以定位到这些被删除行的主键或唯一键信息。在主从复制时,从库依据该事件从对应的表中删除相同的数据行。比如主库执行DELETE FROM users WHERE id = 1
,DELETE_ROWS_EVENT
会记录能定位到id = 1
这一行的关键信息,让从库同步删除操作。
- 用途:用于记录删除操作。当执行
- UPDATE_ROWS_EVENT
- 用途:用于记录更新操作。当执行
UPDATE
语句修改表中的数据行时,会产生该事件。它记录了数据行更新前后的内容,包括哪些列被修改以及新旧值。在主从复制场景下,从库利用该事件对相应表中的数据行进行相同的更新操作,确保主从数据的一致性。例如主库执行UPDATE users SET age = 26 WHERE id = 1
,UPDATE_ROWS_EVENT
会记录id = 1
这一行age
列更新前后的值,供从库同步更新。
- 用途:用于记录更新操作。当执行
- QUERY_EVENT
- 用途:用于记录除了插入、删除、更新行事件之外的其他SQL语句,比如
CREATE TABLE
、ALTER TABLE
、DROP TABLE
等数据定义语言(DDL)语句,以及一些不涉及具体行操作的语句。主库执行这类语句后,从库通过QUERY_EVENT
获取并执行相同的语句,以保持数据库结构和配置的一致性。例如主库执行CREATE TABLE new_table (col1 INT)
,从库会依据QUERY_EVENT
中的信息创建相同的表。
- 用途:用于记录除了插入、删除、更新行事件之外的其他SQL语句,比如