复制模式概念
为了能够安全地配置联机服务器的复制模式,理解复制的一些关键概念很重要。本节介绍了这些概念,是在尝试修改联机服务器的复制模式之前的必读内容。
MySQL中可用的复制模式取决于识别记录的事务的不同技术。复制使用的事务类型如下:
- GTID事务由格式的全局事务标识符(GTID)标识
UUID:NUMBER
。日志中的每个GTID事务都始终以开头Gtid_log_event
。可以使用GTID或使用文件名和位置来解决GTID事务。 - 匿名事务未分配GTID,MySQL确保日志中的每个匿名事务都以开头
Anonymous_gtid_log_event
。在以前的版本中,匿名事务之前没有任何特定事件。只能使用文件名和位置来解决匿名事务。
当使用GTIDs您可以利用自动定位和自动故障切换,以及使用WAIT_FOR_EXECUTED_GTID_SET()
,session_track_gtids
和监控使用Performance模式表复制的事务。启用GTID后,您将无法使用sql_slave_skip_counter
,而是使用空交易。
从运行早期版本的MySQL的主服务器接收到的中继日志中的事务可能根本没有任何特定的事件发生,但是在重播并记录在从属服务器的二进制日志中之后,它们前面都有一个Anonymous_gtid_log_event
。
在线配置复制模式的能力意味着gtid_mode
和enforce_gtid_consistency
变量现在都是动态的,并且可以由具有足以设置全局系统变量的特权的帐户从顶级语句中进行设置。请参见“系统变量特权”。在MySQL 5.6和更早版本中,这两个变量只能在服务器启动时使用适当的选项进行配置,这意味着更改复制模式需要重新启动服务器。在所有版本中,gtid_mode
都可以将其设置为ON
或OFF
,这对应于是否使用GTID标识交易。什么时候gtid_mode=ON
复制匿名事务是不可能的,并且gtid_mode=OFF
只能复制匿名事务。当gtid_mode=OFF_PERMISSIVE
那么新的交易,同时允许复制的事务是要么GTID或匿名交易匿名。当gtid_mode=ON_PERMISSIVE
再新,同时允许复制的事务事务使用GTIDs是要么GTID或匿名交易。这意味着可能有一个复制拓扑,其中包含使用匿名事务和GTID事务的服务器。例如,的主服务器gtid_mode=ON
可以使用来复制到从属服务器gtid_mode=ON_PERMISSIVE
。有效值gtid_mode
如下,并按此顺序:
OFF
OFF_PERMISSIVE
ON_PERMISSIVE
ON
重要的是要注意,gtid_mode
根据上述顺序,一次只能更改一个状态。例如,如果gtid_mode
当前设置为OFF_PERMISSIVE
,则可以更改为OFF
,ON_PERMISSIVE
但不能更改为ON
。这是为了确保服务器正确处理从匿名交易到在线GTID交易的过程。在gtid_mode=ON
和之间切换时gtid_mode=OFF
,GTID状态(即的值gtid_executed
)将保持不变。这样可确保始终保留服务器已应用的GTID集,而与的类型之间的更改无关gtid_mode
。
无论当前选择了什么,与GTID相关的字段都会显示正确的信息gtid_mode
。这意味着,该领域GTID显示设置,如gtid_executed
,gtid_purged
,RECEIVED_TRANSACTION_SET
在replication_connection_status
性能架构表,的GTID相关的结果SHOW SLAVE STATUS
,现在,当有不存在GTIDs返回空字符串。现在,当不使用GTID事务时,显示单个GTID的字段(例如CURRENT_TRANSACTION
在“性能模式”replication_applier_status_by_worker
表中)将显示ANONYMOUS
。
从主复制使用gtid_mode=ON
提供了使用自动定位的能力,该自动定位是使用CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
语句配置的。使用的复制拓扑会影响是否可以启用自动定位,因为此功能依赖于GTID,并且与匿名事务不兼容。如果启用自动定位并遇到匿名事务,则会生成错误。强烈建议在启用自动定位之前确保拓扑中没有剩余匿名事务,请参见“在线启用GTID事务”。
gtid_mode
下表显示了主机和从机上的有效组合以及自动放置的位置,其中主机gtid_mode
在水平方向上显示,从机gtid_mode
在垂直方向上显示。每个条目的含义如下:
Y
:gtid_mode
主从兼容N
:gtid_mode
主机和从机的不兼容*
:此组合可使用自动定位
主从站gtid_mode的有效组合
| 主 | 主 | 主 | 主 |
---|---|---|---|---|
奴隶 | ÿ | ÿ | ñ | ñ |
奴隶 | ÿ | ÿ | ÿ | Y * |
奴隶 | ÿ | ÿ | ÿ | Y * |
奴隶 | ñ | ñ | ÿ | Y * |
当前选择的内容gtid_mode
也会影响gtid_next
变量。下表显示了服务器的不同价值观的行为gtid_mode
和gtid_next
。每个条目的含义如下:
ANONYMOUS
:生成匿名交易。Error
:产生错误,无法执行SET GTID_NEXT
。UUID:NUMBER
:使用指定的UUID:NUMBER生成GTID。New GTID
:使用自动生成的编号生成GTID。
gtid_mode和gtid_next的有效组合
二进制登录 |
二进制注销 |
|
| |
---|---|---|---|---|
| 匿名 | 匿名 | 匿名 | 错误 |
| 匿名 | 匿名 | 匿名 | UUID:NUMBER |
| 新GTID | 匿名 | 匿名 | UUID:NUMBER |
| 新GTID | 匿名 | 错误 | UUID:NUMBER |
当二进制日志关闭并gtid_next
设置AUTOMATIC
为时,则不会生成GTID。这与先前版本的行为一致。