【问题标题】:MariaDB 10.2 Xtrabackup. /usr//bin/wsrep_sst_xtrabackup-v2 WSREP_SST_OPT_PORT: unbound variableMariaDB 10.2 Xtrabackup。 /usr//bin/wsrep_sst_xtrabackup-v2 WSREP_SST_OPT_PORT:未绑定变量
【发布时间】:2017-11-15 10:37:23
【问题描述】:

我刚刚安装了一组新的 Ubuntu 16.04 节点,它们应该作为 MariaDB 10.2 主-主集群使用 XtraBackup 作为 SST 方法。

第一个节点通过命令 galera_new_cluster 正常运行,但第二个节点由于以下错误无法加入集群:

Nov 15 10:59:09 mariadb10 mysqld[15664]: 2017-11-15 10:59:09 140259808827136 [Warning] WSREP: Gap in state sequence. Need state transfer.
Nov 15 10:59:09 mariadb10 mysqld[15664]: 2017-11-15 10:59:09 140259416360704 [Note] WSREP: Running: 'wsrep_sst_xtrabackup-v2 --role 'joiner' --address '10.0.0.10' --datadir '/var/lib/mysql/'   --parent '15664' --binlog '/var/log/mysql/mariadb-bin' '
Nov 15 10:59:09 mariadb10 mysqld[15664]: /usr//bin/wsrep_sst_xtrabackup-v2: line 646: WSREP_SST_OPT_PORT: unbound variable
Nov 15 10:59:09 mariadb10 mysqld[15664]: 2017-11-15 10:59:09 140259416360704 [ERROR] WSREP: Failed to read 'ready <addr>' from: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '10.0.0.10' --datadir '/var/lib/mysql/'   --parent '15664' --binlog '/var/log/mysql/mariadb-bin'
Nov 15 10:59:09 mariadb10 mysqld[15664]: #011Read: '(null)'
Nov 15 10:59:09 mariadb10 mysqld[15664]: 2017-11-15 10:59:09 140259416360704 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '10.0.0.10' --datadir '/var/lib/mysql/'   --parent '15664' --binlog '/var/log/mysql/mariadb-bin' : 1 (Operation not permitted)
Nov 15 10:59:09 mariadb10 mysqld[15664]: 2017-11-15 10:59:09 140259808827136 [ERROR] WSREP: Failed to prepare for 'xtrabackup-v2' SST. Unrecoverable.

这段日志的主要问题是未设置的 WSREP_SST_OPT_PORT。

查看/usr/bin/wsrep_sst_xtrabackup-v2 的代码,它“包含”了/usr/bin/wsrep_sst_common,其中可以通过两种方式设置变量。

  1. 使用--port 命令行参数。
  2. --address 命令行参数中使用端口(ip:port)

由于我现在知道 mariadb 使用什么参数来填充 /usr/bin/wsrep_sst_xtrabackup-v2 的命令行参数,我也不知道如何让它使用具有正确值的 --port--address

我确实已经在 mariadb 的 my.cnf 中使用了一些参数,但没有任何结果。我尝试过的事情是:

  • 将参数wsrep_sst_opt_port=4444 添加到my.cnf。这导致了一个错误,因为该参数不受支持(但是,嘿.. 最好的解决方案是尝试的结果)
  • wsrep_cluster_adress 中的地址添加了端口。这已被接受,但未导致端口号成为 --address 参数的一部分。
  • 将端口添加到wsrep_node_address 中的地址。这也被接受了,但也没有在 --address 参数中的端口号中重新使用。

作为一种解决方法,我确实修改了/usr/bin/wsrep_sst_common,并添加了以下代码(在评论之后开始):

if [ -n "${WSREP_SST_OPT_ADDR_PORT:-}" ]; then
  if [ -n "${WSREP_SST_OPT_PORT:-}" ]; then
...
  else
    readonly WSREP_SST_OPT_PORT="$WSREP_SST_OPT_ADDR_PORT"
  fi
fi

# Start of the workaround
if [ -z "${WSREP_SST_OPT_PORT:-}" ]; then
  readonly WSREP_SST_OPT_PORT="4444"
fi
# End of the workaround

这至少解决了我的非启动集群,但如果没有这种解决方法,我仍然很高兴知道如何让它工作......

【问题讨论】:

    标签: mariadb


    【解决方案1】:

    您遇到的行为实际上是 MariaDB 10.2.10 中的一个错误,MariaDB 团队已经提出了一个修复程序,很可能会在不久的将来发布

    这是 MariaDB 错误跟踪器上问题的链接:

    https://jira.mariadb.org/browse/MDEV-14256

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2022-12-10
      • 2012-10-25
      • 2015-09-04
      相关资源
      最近更新 更多