不幸的是,您需要升级每个主要版本的服务器并为每个主要版本运行 mysql_upgrade(它没有在集群中复制,所以这很好)。在具有混合版本的集群中运行的风险是节点发生故障并从更高版本获取 SST,或者在更高版本的节点上执行了一些不向后兼容的操作,从而破坏了更低版本的节点并导致它请求状态转移,因此您可以看到这可能不会很好地结束。
另外,10.3和10.4之间的权限表结构有变化,Galera协议中的band,所以即使你没有遇到上面提到的问题,复制也很可能会失败。
如果您负担得起,进行多版本升级的最安全和最简单的方法是确保为节点配置 10.1 的 xtrabackup SST 和 10.2 及更高版本的 mariabackup SST,然后将集群降级为单个节点,然后将该节点从 10.2 和 10.3 升级到 10.4(每次运行 mysql_upgrade)。一旦节点一直到 10.4,那么添加更多 10.4 节点是微不足道的。
这样你只需要在单个节点上进行 10.2/mysql_upgrade/10.3/mysql_upgrade_10.4/mysql_upgrade 演练,你可以直接在其余节点上安装 10.4 并让它们在加入集群时获得 SST。
为了使升级更容易,您需要执行以下操作(例如 CentOS/RHEL - 您可以为 Debian 使用相同的存储库脚本:配置文件的位置将不同,软件包名称将全部小写,并且清理up repos 也会有点不同,但仅此而已)
1) 找出您当前的版本:
mysqld --version
2) 为当前版本配置存储库:
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=mariadb-10.1.30
3) 保存您的配置文件(这些将在安装过程中被默认值覆盖)
cp /etc/my.cnf.d/server.cnf ~/
4) 停止服务器
systemctl stop mariadb
5) 卸载旧版本
yum remove MariaDB-server MariaDB-client
# on 10.1 you might also have to remove percona-xtrabackup or percona-xtrabackup-24
# on later versions, this should be replaced with MariaDB-backup
# the rest of the relevant packages are removed as dependencies
6) 更新存储库定义
rm -fr /etc/yum.repos.d/mariadb.repo*
rm -fr /var/cache/yum
yum clean metadata
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=mariadb-10.2
7) 安装新服务器
yum -y install MariaDB-server MariaDB-backup
8) 替换配置文件
cp -pr ~/server.cnf /etc/my.cnf.d/
#you should change the sst method to mariabackup when going from 10.1 to 10.2
9) 启动服务器
galera_new_cluster
10) 运行 mysql_upgrade
mysql_upgrade
11) 转到第 4 步)并针对 10.3 和 10.4 重复该过程(请记住,现在您要删除/添加 MariaDB-backup 而不是 percona-xtrabackup)
使用其中一个新节点来执行此操作可能是最简单的方法,首先在其上安装 10.1 并让它加入旧集群,然后停用旧集群并在新节点上运行升级。
如果您无法将集群降到单个节点,那么您需要在每个主要版本中升级整个集群,方法是滚动升级到 10.2,然后滚动升级到 10.3,最后滚动升级到10.4.尽管仍然存在风险,但这种方式更易于管理。大型 24/7 商店基本上会进行滚动升级,除了他们还会重新配置每个节点的状态转移捐赠者列表,以仅接受来自同一版本节点的转移。
这里有一些关于使用存储库更新脚本的文档:
https://mariadb.com/kb/en/mariadb-package-repository-setup-and-usage/