暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【ACDU翻译】 MySQL 17.1.3.4 使用 GTID 设置复制

原创 由迪 2022-07-27
923

本节描述了在 MySQL 8.0 中配置和启动基于 GTID 的复制的过程。这是一个 “冷启动”过程,假设您是第一次启动源服务器,或者可以停止它;有关使用来自正在运行的源服务器的 GTID 配置副本的信息,请参阅 第 17.1.3.5 节,“使用 GTID 进行故障转移和横向扩展”。有关在线更改服务器上的 GTID 模式的信息,请参阅 第 17.1.4 节,“更改在线服务器上的 GTID 模式”

对于最简单的 GTID 复制拓扑(由一个源和一个副本组成),此启动过程中的关键步骤如下:

  1. 如果复制已在运行,请通过将两台服务器设为只读来同步它们。

  2. 停止两台服务器。

  3. 在启用 GTID 并配置正确选项的情况下重新启动两台服务器。

    启动所描述的服务器所需的mysqld选项将在本节后面的示例中讨论。

  4. 指示副本将源用作复制数据源并使用自动定位。完成此步骤所需的 SQL 语句在本节后面的示例中进行了描述。

  5. 进行新的备份。包含没有 GTID 的事务的二进制日志不能在启用 GTID 的服务器上使用,因此在此之前进行的备份不能用于您的新配置。

  6. 启动副本,然后在两台服务器上禁用只读模式,以便它们可以接受更新。

在以下示例中,两台服务器已经作为源和副本运行,使用 MySQL 的基于二进制日志位置的复制协议。如果您从新服务器开始,请参阅 第 17.1.2.3 节,“为复制创建用户”以获取有关为复制连接添加特定用户的信息和 第 17.1.2.1 节,“设置复制源配置”以获取有关设置 server_id变量的信息. 以下示例显示如何将mysqld启动选项存储在服务器的选项文件中,有关详细信息,请参阅 第 4.2.2.2 节,“使用选项文件”或者,您可以在运行mysqld时使用启动选项 .

后面的大多数步骤都需要使用 MySQL 帐户或其他具有权限 root的 MySQL 用户帐户。mysqladmin需要特权或 特权。 SUPER shutdown``SUPERSHUTDOWN

步骤 1:同步服务器。 此步骤仅在使用已在不使用 GTID 的情况下进行复制的服务器时才需要。对于新服务器,请继续执行步骤 3。通过发出以下命令,在每台服务器上将 read_only系统变量 设置为只读,以使服务器成为只读 :ON

mysql> SET @@GLOBAL.read_only = ON;

等待所有正在进行的事务提交或回滚。然后,让副本赶上源。在继续之前确保副本已处理所有更新非常重要

如果您将二进制日志用于复制以外的任何事情,例如进行时间点备份和恢复,请等到您不需要包含没有 GTID 的事务的旧二进制日志。理想情况下,等待服务器清除所有二进制日志,并等待任何现有备份过期。

重要的

重要的是要了解包含没有 GTID 的事务的日志不能在启用 GTID 的服务器上使用。在继续之前,您必须确保没有 GTID 的事务不存在于拓扑中的任何位置。

第 2 步:停止两台服务器。 使用mysqladmin 停止每个服务器,如下所示,其中*username*是具有足够权限的 MySQL 用户的用户名来关闭服务器:

$> mysqladmin -uusername -p shutdown

然后在提示符处提供此用户的密码。

第 3 步:在启用 GTID 的情况下启动两台服务器。 gtid_mode要启用基于 GTID 的复制,必须通过将变量 设置为启用 GTID 模式来启动每个服务器 ON,并 enforce_gtid_consistency 启用变量以确保仅记录对基于 GTID 的复制安全的语句。例如:

gtid_mode=ON enforce-gtid-consistency=ON

--skip-slave-start使用该选项或从 MySQL 8.0.24( 系统变量) 启动每个副本 skip_slave_start,以确保在配置副本设置之前不会开始复制。从 MySQL 8.0.26 开始,使用 --skip-replica-startor skip_replica_start代替。有关 GTID 相关选项和变量的更多信息,请参阅 第 17.1.6.5 节,“全局事务 ID 系统变量”

在使用 mysql.gtid_executed Table时,不必启用二进制日志记录以使用 GTID 。源服务器必须始终启用二进制日志记录才能进行复制。但是,副本服务器可以使用 GTID,但没有二进制日志记录。如果您需要在副本服务器上禁用二进制日志记录,您可以通过为副本指定 --skip-log-bin--log-replica-updates=OFF--log-slave-updates=OFF选项来执行此操作。

第 4 步:将副本配置为使用基于 GTID 的自动定位。 告诉副本使用具有基于 GTID 事务的源作为复制数据源,并使用基于 GTID 的自动定位而不是基于文件的定位。在副本上发出 CHANGE REPLICATION SOURCE TO 语句(来自 MySQL 8.0.23)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前),包括SOURCE_AUTO_POSITION| MASTER_AUTO_POSITION语句中的选项告诉副本源的事务由 GTID 标识。

您可能还需要为源的主机名和端口号以及复制用户帐户的用户名和密码提供适当的值,副本可以使用该帐户连接到源;如果这些已经在步骤 1 之前设置并且不需要进行进一步的更改,则可以从此处显示的语句中安全地省略相应的选项。

mysql> CHANGE MASTER TO > MASTER_HOST = host, > MASTER_PORT = port, > MASTER_USER = user, > MASTER_PASSWORD = password, > MASTER_AUTO_POSITION = 1; Or from MySQL 8.0.23: mysql> CHANGE REPLICATION SOURCE TO > SOURCE_HOST = host, > SOURCE_PORT = port, > SOURCE_USER = user, > SOURCE_PASSWORD = password, > SOURCE_AUTO_POSITION = 1;

第 5 步:进行新的备份。 由于您已启用 GTID,因此在启用 GTID 之前进行的现有备份将无法再在这些服务器上使用。此时进行新备份,这样您就不会没有可用的备份。

例如,您可以FLUSH LOGS在要进行备份的服务器上执行。然后要么明确地进行备份,要么等待您可能设置的任何定期备份例程的下一次迭代。

第 6 步:启动副本并禁用只读模式。 像这样启动副本:

mysql> START SLAVE; Or from MySQL 8.0.22: mysql> START REPLICA;

仅当您在步骤 1 中将服务器配置为只读时,才需要执行以下步骤。要允许服务器再次开始接受更新,请发出以下语句:

mysql> SET @@GLOBAL.read_only = OFF;

基于 GTID 的复制现在应该正在运行,您可以像以前一样在源上开始(或恢复)活动。 第 17.1.3.5 节,“使用 GTID 进行故障转移和横向扩展”,讨论了在使用 GTID 时创建新副本。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论