我正在将 Galera 集群从 MySQL 迁移到 MariaDB 10.3.27,作为此过程的一部分,我想将备份方法从有点繁琐(且阻塞)的 garbd+rsync 更改为 garbd+mariabackup。将 SST 方法更改为 mariabackup 从一开始就运行良好,因此我认为节点设置正确,但我调用 garbd 的方式是错误的:
garbd --address 'gcomm://10.2.96.145:4567,10.2.96.146:4567?gmcast.listen_addr=tcp://0.0.0.0:4444' --group m1t-shared-mariadb --donor m1t-shared-db-5 --sst mariabackup
端口 4444 是从文档中复制粘贴的,我认为它属于本地 garbd 的监听端口?无论如何,我使用 4444 还是集群其余部分的 4567 都无所谓。
在捐助者节点上我看到:
2021-01-25 17:34:26 0 [Note] WSREP: Member 0.0 (garb) requested state transfer from 'm1t-shared-db-5'. Selected 3.0 (m1t-shared-db-5)(SYNCED) as donor.
2021-01-25 17:34:26 0 [Note] WSREP: Shifting SYNCED -> DONOR/DESYNCED (TO: 19280263)
2021-01-25 17:34:26 2 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2021-01-25 17:34:26 0 [Note] WSREP: Running: 'wsrep_sst_mariabackup --role 'donor' --address '' --socket '/var/lib/mysql/mysql.sock' --datadir '/data/mysql/' --gtid 'c12b9eef-1780-11eb-bac6-da564ff9aacc:19280263' --gtid-domain-id '0' --mysqld-args --basedir=/usr'
2021-01-25 17:34:26 2 [Note] WSREP: sst_donor_thread signaled with 0
2021-01-25 17:34:26 0 [Note] WSREP: 0.0 (garb): State transfer from 3.0 (m1t-shared-db-5) complete.
WSREP_SST: [INFO] Streaming with xbstream (20210125 17:34:26.604)
WSREP_SST: [INFO] Using socat as streamer (20210125 17:34:26.606)
WSREP_SST: [ERROR] Upgrade joiner to 5.6.21 or higher for backup locks support (20210125 17:34:26.609)
WSREP_SST: [ERROR] The joiner is not supported for this version of donor (20210125 17:34:26.611)
WSREP_SST: [ERROR] Cleanup after exit with status:93 (20210125 17:34:26.613)
WSREP_SST: [INFO] Cleaning up temporary directories (20210125 17:34:26.617)
2021-01-25 17:34:26 0 [ERROR] WSREP: Failed to read from: wsrep_sst_mariabackup --role 'donor' --address '' --socket '/var/lib/mysql/mysql.sock' --datadir '/data/mysql/' --gtid 'c12b9eef-1780-11eb-bac6-da564ff9aacc:19280263' --gtid-domain-id '0' --mysqld-args --basedir=/usr
2021-01-25 17:34:26 0 [ERROR] WSREP: Process completed with error: wsrep_sst_mariabackup --role 'donor' --address '' --socket '/var/lib/mysql/mysql.sock' --datadir '/data/mysql/' --gtid 'c12b9eef-1780-11eb-bac6-da564ff9aacc:19280263' --gtid-domain-id '0' --mysqld-args --basedir=/usr: 93 (Protocol not supported)
这个错误Upgrade joiner to 5.6.21 or higher for backup locks support
似乎是个转移注意力的幌子,因为所需的版本是从参数中解析出来的--address
,但参数显然是空的。
为了寻找线索,我开始阅读 MariaDB 的sql/wsrep_sst.cc
文件,以找出--address
在调用插件之前如何填充wsrep_sst_*
。如果wsrep_sst_receive_address
变量设置为除“AUTO”之外的任何值,它应该只使用它;否则它会使用,wsrep_node_address
或者,如果失败,一些猜测程序(是的,那只是据记载)。但是,这似乎不起作用。--address
无论我设置什么,它始终为空。此外,如果是“AUTO”并且不是有效的 IP 地址,wsrep_sst_receive_address
则应记录错误。我试图激发它以找出所采用的代码路径,但也没有成功。wsrep_sst_receive_address
wsrep_node_address
知道这里出了什么问题吗?