复制模式概念
为了能够安全地配置联机服务器的复制模式,理解复制的一些关键概念很重要。本节介绍了这些概念,是在尝试修改联机服务器的复制模式之前的必读内容。
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如下,并按此顺序:
OFFOFF_PERMISSIVEON_PERMISSIVEON
重要的是要注意,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。这与先前版本的行为一致。
