9.5.2 Пример добавления экземпляров в ReplicaSet
Для добавления экземпляров в ReplicaSet выполните следующие шаги:
-
Используйте операцию
для добавления вторичных экземпляров вReplicaSet.addInstance(instance)ReplicaSet. Вы указываетеinstanceв качестве URI-подобной строки подключения. Указанный вами пользователь должен иметь необходимые привилегии и должен быть одинаковым на всех экземплярах в ReplicaSet. Дополнительную информацию см. в разделе 9.2, «Настройка экземпляров InnoDB ReplicaSet».Например, для добавления экземпляра по адресу
rs-2, номеру порта3306и пользователюrsadmin, выполните:mysql-js>
rs.addInstance('rsadmin@rs-2:3306')Adding instance to the replicaset... * Performing validation checks This instance reports its own address as rsadmin@rs-2 rsadmin@rs-2: Instance configuration is suitable. * Checking async replication topology... * Checking transaction state of the instance... NOTE: The target instance 'rsadmin@rs-2' has not been pre-provisioned (GTID set is empty). The Shell is unable to decide whether replication can completely recover its state. The safest and most convenient way to provision a new instance is through automatic clone provisioning, which will completely overwrite the state of 'rsadmin@rs-2' with a physical snapshot from an existing replicaset member. To use this method by default, set the 'recoveryMethod' option to 'clone'. WARNING: It should be safe to rely on replication to incrementally recover the state of the new instance if you are sure all updates ever processed in the replicaset were done with GTIDs enabled, there are no purged transactions and the new instance contains the same GTID set as the replicaset, or a subset of it. To use this method by default, set the 'recoveryMethod' option to 'incremental'. Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone): -
В этом случае мы не указали метод восстановления, поэтому операция подсказывает, как лучше поступить. В этом примере мы выбираем вариант
Clone, потому что у нас нет активных транзакций на экземпляре, присоединяющемся к ReplicaSet. Поэтому нет риска удаления данных из присоединяемого экземпляра. Дополнительную информацию см. в разделе 9.5.1, «Подготовка экземпляров для InnoDB ReplicaSet».Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone):
C* Updating topology Waiting for clone process of the new member to complete. Press ^C to abort the operation. * Waiting for clone to finish... NOTE: rsadmin@rs-2 is being cloned from rsadmin@rs-1 ** Stage DROP DATA: Completed ** Clone Transfer FILE COPY ############################################################ 100% Completed PAGE COPY ############################################################ 100% Completed REDO COPY ############################################################ 100% Completed ** Stage RECOVERY: \ NOTE: rsadmin@rs-2 is shutting down... * Waiting for server restart... ready * rsadmin@rs-2 has restarted, waiting for clone to finish... * Clone process has finished: 59.63 MB transferred in about 1 second (~1.00 B/s) ** Configuring rsadmin@rs-2 to replicate from rsadmin@rs-1 ** Waiting for new instance to synchronize with PRIMARY... The instance 'rsadmin@rs-2' was added to the replicaset and is replicating from rsadmin@rs-1. -
Предполагая, что экземпляр подходит для использования в InnoDB ReplicaSet, процесс восстановления продолжается. В данном случае новый экземпляр использует MySQL Clone для копирования всех транзакций, которые он еще не применил, с первичного экземпляра, а затем присоединяется к ReplicaSet в качестве онлайн-экземпляра. Для проверки используйте операцию
:rs.status()mysql-js>
rs.status(){ "replicaSet": { "name": "example", "primary": "rs-1:3306", "status": "AVAILABLE", "statusText": "All instances available.", "topology": { "rs-1:3306": { "address": "rs-1:3306", "instanceRole": "PRIMARY", "mode": "R/W", "status": "ONLINE" }, "rs-2:3306": { "address": "rs-2:3306", "instanceRole": "SECONDARY", "mode": "R/O", "replication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Replica has read all relay log; waiting for more updates", "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": null }, "status": "ONLINE" } }, "type": "ASYNC" } }Этот вывод показывает, что ReplicaSet под названием
exampleтеперь состоит из двух экземпляров MySQL, а первичным являетсяrs-1. В настоящее время имеется один вторичный экземпляр по адресуrs-2, являющийся копией первичного. ReplicaSet находится в онлайн-режиме, что означает, что первичный и вторичный экземпляры синхронизированы. На этом этапе ReplicaSet готов к обработке транзакций. Для переопределения интерактивного режима MySQL Shell выберите наиболее подходящий метод восстановления. Используйте вариант
recoveryMethodдля настройки того, как экземпляр восстанавливает данные, необходимые для присоединения к ReplicaSet. Дополнительную информацию см. в разделе 7.4.6, «Использование MySQL Clone с InnoDB Cluster».
© 2025 Oracle
Licensed under the GPLv2 License.