#### 18.8.3.3 Group Replication Online Upgrade Methods

[]()

 Choose one of the following methods of upgrading a Group Replication group:

##### Rolling In-Group Upgrade

 This method is supported provided that servers running a newer version are not generating workload to the group while there are still servers with an older version in it. In other words servers with a newer version can join the group only as secondaries. In this method there is only ever one group, and each server instance is removed from the group, upgraded and then rejoined to the group.

 This method is well suited to single-primary groups. When the group is operating in single-primary mode, if you require the primary to remain the same throughout (except when it is being upgraded itself), it should be the last member to be upgraded. The primary cannot remain as the primary unless it is running the lowest MySQL Server version in the group. After the primary has been upgraded, you can use the [`group_replication_set_as_primary()`](group-replication-functions-for-new-primary.html#function_group-replication-set-as-primary) function to reappoint it as the primary. If you do not mind which member is the primary, the members can be upgraded in any order. The group elects a new primary whenever necessary from among the members running the lowest MySQL Server version, following the election policies described in [Section 18.1.3.1, “Single-Primary Mode”](group-replication-single-primary-mode.html).

 For groups operating in multi-primary mode, during a rolling in-group upgrade the number of primaries is decreased, causing a reduction in write availability. This is because if a member joins a group when it is running a higher MySQL Server version than the lowest version that the existing group members are running, it automatically remains in read-only mode ([`super_read_only=ON`](server-system-variables.html#sysvar_super_read_only)). Note that members running MySQL 8.0.17 or higher take into account the patch version of the release when checking this, but members running MySQL 8.0.16 or lower, or MySQL 5.7, only take into account the major version. When all members have been upgraded to the same release, from MySQL 8.0.17, they all change back to read-write mode automatically. For earlier releases, you must set [`super_read_only=OFF`](server-system-variables.html#sysvar_super_read_only) manually on each member that should function as a primary following the upgrade.

 For full information on version compatibility in a group and how this influences the behavior of a group during an upgrade process, see [Section 18.8.1, “Combining Different Member Versions in a Group”](group-replication-online-upgrade-combining-versions.html) .

##### Rolling Migration Upgrade

 In this method you remove members from the group, upgrade them and then create a second group using the upgraded members. For groups operating in multi-primary mode, during this process the number of primaries is decreased, causing a reduction in write availability. This does not impact groups operating in single-primary mode.

 Because the group running the older version is online while you are upgrading the members, you need the group running the newer version to catch up with any transactions executed while the members were being upgraded. Therefore one of the servers in the new group is configured as a replica of a primary from the older group. This ensures that the new group catches up with the older group. Because this method relies on an asynchronous replication channel which is used to replicate data from one group to another, it is supported under the same assumptions and requirements of asynchronous source-replica replication, see [Chapter 17, *Replication*](replication.html). For groups operating in single-primary mode, the asynchronous replication connection to the old group must send data to the primary in the new group, for a multi-primary group the asynchronous replication channel can connect to any primary.

 The process is to:

* remove members from the original group running the older server version one by one, see [Section 18.8.3.2, “Upgrading a Group Replication Member”](group-replication-upgrading-member.html)

* upgrade the server version running on the member, see [Section 2.11, “Upgrading MySQL”](upgrading.html). You can either follow an in-place or provision approach to upgrading.

* create a new group with the upgraded members, see [Chapter 18, *Group Replication*](group-replication.html). In this case you need to configure a new group name on each member (because the old group is still running and using the old name), bootstrap an initial upgraded member, and then add the remaining upgraded members.

* set up an asynchronous replication channel between the old group and the new group, see [Section 17.1.3.4, “Setting Up Replication Using GTIDs”](replication-gtids-howto.html). Configure the older primary to function as the asynchronous replication source server and the new group member as a GTID-based replica.

 Before you can redirect your application to the new group, you must ensure that the new group has a suitable number of members, for example so that the group can handle the failure of a member. Issue `SELECT * FROM performance_schema.replication_group_members` and compare the initial group size and the new group size. Wait until all data from the old group is propagated to the new group and then drop the asynchronous replication connection and upgrade any missing members.

##### Rolling Duplication Upgrade

 In this method you create a second group consisting of members which are running the newer version, and the data missing from the older group is replicated to the newer group. This assumes that you have enough servers to run both groups simultaneously. Due to the fact that during this process the number of primaries is *not* decreased, for groups operating in multi-primary mode there is no reduction in write availability. This makes rolling duplication upgrade well suited to groups operating in multi-primary mode. This does not impact groups operating in single-primary mode.

 Because the group running the older version is online while you are provisioning the members in the new group, you need the group running the newer version to catch up with any transactions executed while the members were being provisioned. Therefore one of the servers in the new group is configured as a replica of a primary from the older group. This ensures that the new group catches up with the older group. Because this method relies on an asynchronous replication channel which is used to replicate data from one group to another, it is supported under the same assumptions and requirements of asynchronous source-replica replication, see [Chapter 17, *Replication*](replication.html). For groups operating in single-primary mode, the asynchronous replication connection to the old group must send data to the primary in the new group, for a multi-primary group the asynchronous replication channel can connect to any primary.

 The process is to:

* deploy a suitable number of members so that the group running the newer version can handle failure of a member

* take a backup of the existing data from a member of the group

* use the backup from the older member to provision the members of the new group, see [Section 18.8.3.4, “Group Replication Upgrade with **mysqlbackup**”](group-replication-upgrade-with-mysqlbackup.html) for one method.

  Note

   You must restore the backup to the same version of MySQL which the backup was taken from, and then perform an in-place upgrade. For instructions, see [Section 2.11, “Upgrading MySQL”](upgrading.html).

* create a new group with the upgraded members, see [Chapter 18, *Group Replication*](group-replication.html). In this case you need to configure a new group name on each member (because the old group is still running and using the old name), bootstrap an initial upgraded member, and then add the remaining upgraded members.

* set up an asynchronous replication channel between the old group and the new group, see [Section 17.1.3.4, “Setting Up Replication Using GTIDs”](replication-gtids-howto.html). Configure the older primary to function as the asynchronous replication source server and the new group member as a GTID-based replica.

 Once the ongoing data missing from the newer group is small enough to be quickly transferred, you must redirect write operations to the new group. Wait until all data from the old group is propagated to the new group and then drop the asynchronous replication connection.

