[MY-011526]
報錯信息:
Error number: MY-011526; Symbol: ER_GRP_RPL_MEMBER_TRANS_GREATER_THAN_GRP; SQLSTATE: HY000
Message: This member has more executed transactions than those present in the group. Local transactions: %s > Group transactions: %s
ER_GRP_RPL_MEMBER_TRANS_GREATER_THAN_GRP was added in 8.0.11.
報錯位置:
int Plugin_gcs_events_handler::compare_member_transaction_sets() const {
/*判斷本地的集合是不是複製組集合的子集,如果不是拋出異常ER_GRP_RPL_MEMBER_TRANS_GREATER_THAN_GRP*/
if (!local_member_set.is_subset(&group_set)) {
char *local_gtid_set_buf;
local_member_set.to_string(&local_gtid_set_buf);
char *group_gtid_set_buf;
group_set.to_string(&group_gtid_set_buf);
/*拋錯位置*/
LogPluginErr(ERROR_LEVEL, ER_GRP_RPL_MEMBER_TRANS_GREATER_THAN_GRP,
local_gtid_set_buf, group_gtid_set_buf);
my_free(local_gtid_set_buf);
my_free(group_gtid_set_buf);
result = 1;
}
}
報錯判斷函數:
/*判斷本地的集合是不是複製組集合子集的判斷方法*/
bool Gtid_set::is_subset(const Gtid_set *super) const {
// Check if all GNOs in this Gtid_set for sidno exist in other
// Gtid_set for super_
Const_interval_iterator super_ivit(super, super_sidno);
if (!is_interval_subset(&ivit, &super_ivit)) DBUG_RETURN(false);
}
bool Gtid_set::is_interval_subset(Const_interval_iterator *sub,
Const_interval_iterator *super) {
while (sub_iv->start > super_iv->end) {
super->next();
super_iv = super->get();
/*實際判斷本地的gitd集合是否是組複製中的gitd集合的子集,如果爲空,則返回false*/
// If we reach end of super, then no interal covers sub_iv, so
// sub is not a subset of super.
if (super_iv == NULL) DBUG_RETURN(false);
}
}
結論:MGR集羣中如果子節點的gtid集合超出了主節點的gtid集合會提示[MY-011526]錯誤
解決方法:
1.現存主節點通過xtrabackup進行備份
sudo /usr/bin/xtrabackup --defaults-file=/etc/my.cnf --host=ip --user=賬號 --password=密碼 --port=端口 --socket=socket文件 --backup --target-dir=/data/backup/
2.主節點備份發送到從節點進行恢復
2.1進入mysql的安裝目錄,備份現有data數據文件夾
>mv data databack
>mkdir data
2.2恢復備份
>sudo /usr/bin/xtrabackup --defaults-file=/etc/my.cnf --user=賬號 --prepare --target-dir=/data/backup/
>sudo /usr/bin/xtrabackup --defaults-file=/etc/my.cnf --user=賬號 --copy-back --target-dir=/data/backup/
2.3更改data文件夾屬主
>sudo chown -R mysql:mysql data
2.4啓動從節點mysql
>sudo ./bin/mysqld --user=mysql &
2.5清除slave_master_info和slave_relay_log_info表信息
>use mysql
>truncate table slave_master_info;
>truncate table slave_relay_log_info;
2.5重啓mysql
2.6確定gtid_executed和gtid_purged是否一致
>select * from @@gtid_executed;
>select * from @@gtid_purged;
2.7重置mater信息和gtid_executed信息
>reset master;
>set global gtid_purged =
注意:此處設置的值爲2.6查詢後確定一致的gtid的數據集範圍值
2.8重新建立到主節點通道
>CHANGE MASTER TO MASTER_USER='rpl', MASTER_PASSWORD='root' FOR CHANNEL 'group_replication_recovery';
2.9啓動從節點
>start group_replication
3:請關注,後續介紹如何通過binlog的gtid信息重新建立主從關係