[ACDU 翻译] MySQL 17.2.4.2 复制元数据存储库

副本服务器创建两个复制元数据存储库,连接元数据存储库和应用程序元数据存储库。复制元数据存储库在副本服务器关闭后仍然存在。如果正在使用基于二进制日志文件位置的复制,当副本重新启动时,它会读取两个存储库以确定它之前从源读取二进制日志和处理自己的中继日志的进度。如果正在使用基于 GTID 的复制,则副本不会为此目的使用复制元数据存储库,但它们包含的其他元数据确实需要它们。

  • 副本的连接元数据存储库包含复制 I/O(接收器)线程连接到复制源服务器并从源的二进制日志中检索事务所需的信息。此存储库中的元数据包括连接配置、复制用户帐户详细信息、连接的 SSL 设置以及复制接收器线程当前从源的二进制日志读取的文件名和位置。
  • 副本的应用程序元数据存储库包含复制 SQL(应用程序)线程从副本的中继日志读取和应用事务所需的信息。此存储库中的元数据包括复制应用程序线程在中继日志中执行事务的文件名和位置,以及源二进制日志中的等效位置。它还包括应用事务过程的元数据,例如工作线程的数量和 PRIVILEGE_CHECKS_USER通道的帐户。

连接元数据存储库写入 系统模式 slave_master_info中的表, 应用程序元数据存储库写入系统模式中的表 。如果mysqld无法初始化复制元数据存储库的表,则会发出警告消息,但允许副本继续启动。当从不支持对存储库使用表的 MySQL 版本升级到支持它们的版本时,最有可能发生这种情况。 mysql``slave_relay_log_info``mysql

重要的

  1. 不要尝试 手动更新或插入表mysql.slave_master_info中 的行。mysql.slave_relay_log_info这样做会导致未定义的行为,并且不受支持。复制正在进行时,不允许 执行任何需要对slave_master_info和 表中的一个或两个表进行写锁定的 语句(尽管任何时候都允许只执行读取的语句)。slave_relay_log_info
  2. 连接元数据存储库表的访问权限mysql.slave_master_info应仅限于数据库管理员,因为它包含用于连接到源的复制用户帐户名和密码。使用受限访问模式来保护包含此表的数据库备份。从 MySQL 8.0.21 开始,您可以从连接元数据存储库中清除复制用户帐户凭据,而是始终使用 START REPLICA语句或START GROUP_REPLICATION启动复制通道的语句。这种方法意味着复制通道始终需要操作员干预才能重新启动,但帐户名和密码不会记录在复制元数据存储库中。

RESET REPLICA清除复制元数据存储库中的数据,复制连接参数除外(取决于 MySQL 服务器版本)。有关详细信息,请参阅 的说明 RESET REPLICA

从 MySQL 8.0.27 开始,您可以GTID_ONLY 在语句上设置选项CHANGE REPLICATION SOURCE TO以停止复制通道在复制元数据存储库中保留文件名和文件位置。这避免了在基于 GTID 的复制实际上不需要它们的情况下对表进行写入和读取。使用该GTID_ONLY 设置,当副本在事务中排队和应用事件时,或者当复制线程停止和启动时,连接元数据存储库和应用程序元数据存储库不会更新。文件位置在内存中进行跟踪,并且可以使用SHOW REPLICA STATUS如果需要,请声明。复制元数据存储库仅在以下情况下同步:

  • 发表CHANGE REPLICATION SOURCE TO声明时。
  • 发表RESET REPLICA 声明时。RESET REPLICA ALL 删除而不是更新存储库,因此它们是隐式同步的。
  • 初始化复制通道时。
  • 如果复制元数据存储库从文件移动到表。

在 MySQL 8.0 之前,要将复制元数据存储库创建为表,必须 在服务器启动时指定master_info_repository=TABLE 和 。relay_log_info_repository=TABLE否则,将存储库创建为名为 master.infoand 的数据目录中的文件,或者使用选项和 系统变量relay-log.info指定的替代名称和位置 。从 MySQL 8.0 开始,将复制元数据存储库创建为表是默认设置,并且不推荐使用所有这些系统变量。 --master-info-filerelay_log_info_file

mysql.slave_master_infomysql.slave_relay_log_info表是使用InnoDB事务存储引擎创建 的。对应用程序元数据存储库表的更新与事务一起提交,这意味着该存储库中记录的副本的进度信息始终与已应用于数据库的内容一致,即使在服务器意外停机的情况下也是如此。有关对意外停止最具弹性的副本上的设置组合的信息,请参阅 第 17.4.2 节,“处理副本的意外停止”

当您备份副本的数据或传输其数据的快照以创建新副本时,请确保 mysql.slave_master_info包含 mysql.slave_relay_log_info包含复制元数据存储库的表。对于克隆操作,请注意,当复制元数据存储库被创建为表时,它们会在克隆操作期间被复制到接收者,但当它们被创建为文件时,它们不会被复制。当使用基于二进制日志文件位置的复制时,需要复制元数据存储库在重新启动恢复、复制或克隆的副本后恢复复制。如果您没有中继日志文件,但仍有应用程序元数据存储库,则可以检查它以确定复制 SQL 线程在源的二进制日志中执行了多远。然后您可以使用CHANGE REPLICATION SOURCE TO语句(来自 MySQL 8.0.23)或 CHANGE MASTER TOSOURCE_LOG_FILE带有| 的语句(在 MySQL 8.0.23 之前) MASTER_LOG_FILESOURCE_LOG_POS| MASTER_LOG_POS告诉副本从该点重新读取源中的二进制日志的选项(前提是源上仍然存在所需的二进制日志)。

另一个存储库,即应用程序工作人员元数据存储库,主要是为内部使用而创建的,它保存有关多线程副本上工作线程的状态信息。应用程序工作人员元数据存储库包括中继日志文件的名称和位置以及每个工作线程的源二进制日志文件。如果将应用程序元数据存储库创建为表(这是默认设置),则应用程序工作器元数据存储库将写入该 mysql.slave_worker_info表。如果将应用程序元数据存储库写入文件,则将应用程序工作器元数据存储库写入 worker-relay-log.info文件。对于外部使用,工作线程的状态信息显示在性能模式中 replication_applier_status_by_worker 桌子。

复制元数据存储库最初包含的信息类似于语句输出中显示的信息 SHOW REPLICA STATUS,这在 第 13.4.2 节,“用于控制副本服务器的 SQL 语句”中进行了讨论。此后,已将更多信息添加到该 SHOW REPLICA STATUS语句未显示的复制元数据存储库中。

对于连接元数据存储库,下表显示了 mysql.slave_master_info表中的列、显示的列 SHOW REPLICA STATUS以及弃用 master.info文件中的行之间的对应关系。

slave_master_info表列 SHOW REPLICA STATUS柱子 master.info文件行 描述
Number_of_lines [没有任何] 1 表中的列数(或文件中的行数)
Master_log_name Source_Log_File 2 当前正在从源读取的二进制日志的名称
Master_log_pos Read_Source_Log_Pos 3 已从源读取的二进制日志中的当前位置
Host Source_Host 4 复制源服务器的主机名
User_name Source_User 5 用于连接到源的复制用户帐户名
User_password 密码(未显示 SHOW REPLICA STATUS 6 用于连接到源的复制用户帐户密码
Port Source_Port 7 用于连接复制源服务器的网络端口
Connect_retry Connect_Retry 8 副本在尝试重新连接到源之前等待的时间段(以秒为单位)
Enabled_ssl Source_SSL_Allowed 9 副本是否支持 SSL 连接
Ssl_ca Source_SSL_CA_File 10 用于证书颁发机构 (CA) 证书的文件
Ssl_capath Source_SSL_CA_Path 11 证书颁发机构 (CA) 证书的路径
Ssl_cert Source_SSL_Cert 12 SSL 证书文件的名称
Ssl_cipher Source_SSL_Cipher 13 SSL 连接握手中使用的可能密码列表
Ssl_key Source_SSL_Key 14 SSL 密钥文件的名称
Ssl_verify_server_cert Source_SSL_Verify_Server_Cert 15 是否验证服务器证书
Heartbeat [没有任何] 16 复制心跳之间的间隔,以秒为单位
Bind Source_Bind 17 应使用副本的哪个网络接口连接到源
Ignored_server_ids Replicate_Ignore_Server_Ids 18 要忽略的服务器 ID 列表。请注意,对于 Ignored_server_ids服务器 ID 列表,前面是要忽略的服务器 ID 总数。
Uuid Source_UUID 19 源的唯一 ID
Retry_count Source_Retry_Count 20 允许的最大重新连接尝试次数
Ssl_crl [没有任何] 21 SSL 证书吊销列表文件的路径
Ssl_crlpath [没有任何] 22 包含 SSL 证书吊销列表文件的目录的路径
Enabled_auto_position Auto_position 23 是否使用 GTID 自动定位
Channel_name Channel_name 24 复制通道的名称
Tls_version Source_TLS_Version 25 源上的 TLS 版本
Public_key_path Source_public_key_path 26 RSA 公钥文件的名称
Get_public_key Get_source_public_key 27 是否从源请求 RSA 公钥
Network_namespace Network_namespace 28 网络命名空间
Master_compression_algorithm [没有任何] 29 连接到源的允许的压缩算法
Master_zstd_compression_level [没有任何] 30 zstd压缩级别
Tls_ciphersuites [没有任何] 31 TLSv1.3 允许的密码套件
Source_connection_auto_failover [没有任何] 32 是否开启异步连接故障转移机制
Gtid_only [没有任何] 33 频道是否仅使用 GTID 且不保留仓位

对于应用程序元数据存储库,下表显示了 mysql.slave_relay_log_info表中的列、显示的列 SHOW REPLICA STATUS以及弃用 relay-log.info文件中的行之间的对应关系。

slave_relay_log_info表列 SHOW REPLICA STATUS柱子 relay-log.info文件中的行 描述
Number_of_lines [没有任何] 1 表格中的列数或文件中的行数
Relay_log_name Relay_Log_File 2 当前中继日志文件的名称
Relay_log_pos Relay_Log_Pos 3 中继日志文件中的当前位置;到此位置的事件已在副本数据库上执行
Master_log_name Relay_Source_Log_File 4 从中读取中继日志文件中的事件的源二进制日志文件的名称
Master_log_pos Exec_Source_Log_Pos 5 已在副本上执行的事件在源二进制日志文件中的等效位置
Sql_delay SQL_Delay 6 副本必须落后于源的秒数
Number_of_workers [没有任何] 7 并行应用复制事务的工作线程数
Id [没有任何] 8 用于内部目的的 ID;目前这始终是 1
Channel_name Channel_name 9 复制通道的名称
Privilege_checks_username [没有任何] 10 PRIVILEGE_CHECKS_USER频道帐户的用户名
Privilege_checks_hostname [没有任何] 11 PRIVILEGE_CHECKS_USER频道帐户的主机名
Require_row_format [没有任何] 12 通道是否只接受基于行的事件
Require_table_primary_key_check [没有任何] 13 通道关于表是否必须具有 CREATE TABLEALTER TABLE操作的主键的策略
Assign_gtids_to_anonymous_transactions_type [没有任何] 14 如果通道使用副本的本地 UUID 将 GTID 分配给尚未复制的事务,则此值为LOCAL; 如果通道使用手动设置的 UUID 执行此操作,则值为UUID. 如果通道在这种情况下没有分配 GTID,则值为 OFF
Assign_gtids_to_anonymous_transactions_value [没有任何] 15 分配给匿名事务的 GTID 中使用的 UUID

免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论