MySQL 提供了多种不同的复制方案,包括基于语句的复制 (statement-based replication)、基于行的复制 (row-based replication)和混合复制 (mixed replication)。
# 基于语句的复制
binlog_format=STATEMENT
# 基于行的复制
binlog_format=ROW
# 混合复制
binlog_format=MIXED
基于语句的复制是 MySQL 的默认复制模式,它直接执行 SQL 语句并将其记录到二进制日志中。当从服务器执行这些语句时,它们被相同的顺序再次执行以生成相同的数据。由于它会重复执行相同的 SQL 语句,因此基于语句的复制可能会导致一些数据不一致的问题。
另一方面,基于行的复制将数据更改作为每个行的变更,而不是 SQL 语句的集合。从服务器接收到更改事件后,它就会将其直接应用于它的副本数据库中。这种复制模式更加安全和可靠,因为它可以忽略 SQL 语句产生的任何问题。
混合复制基于语句和行的复制结合,它将基于语句的复制用于非事务性表,并将基于行的复制用于事务性表。这种复制模式在提供可靠性和灵活性方面具有优势。
在配置 MySQL 复制时,需要考虑复制的拓扑结构。最基本的拓扑结构是 单主-单从 (master-slave) 复制,其中一个主服务器负责将数据复制到一个或多个从服务器上。更高级的拓扑结构可能包括 主-从-从 (master-slave-slave) 复制或环形复制 (circular replication)。