我有一个 3 节点多主 MariaDB Galera 集群,它没有同步对 InnoDB 表定义的修改。
服务器版本:10.3.10-MariaDB MariaDB 服务器
wsrep_provider_version:25.3.24(r3825)
该表是mysql.innodb_table_stats
,不同的是字段的数据类型/长度table_name
。
使用mysql_upgrade实用程序在 galera -01成员中执行的 DDL 操作:
ALTER TABLE innodb_index_stats MODIFY `table_name` varchar(199) COLLATE utf8_bin NOT NULL;
galera-01成员中的表定义:
CREATE TABLE `innodb_table_stats` (
`database_name` varchar(64) COLLATE utf8_bin NOT NULL,
`table_name` varchar(199) COLLATE utf8_bin NOT NULL,
`last_update` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`n_rows` bigint(20) unsigned NOT NULL,
`clustered_index_size` bigint(20) unsigned NOT NULL,
`sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`database_name`,`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0
galera-02和galera-03成员中的表定义:
CREATE TABLE `innodb_table_stats` (
`database_name` varchar(64) COLLATE utf8_bin NOT NULL,
`table_name` varchar(64) COLLATE utf8_bin NOT NULL,
`last_update` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`n_rows` bigint(20) unsigned NOT NULL,
`clustered_index_size` bigint(20) unsigned NOT NULL,
`sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`database_name`,`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0
集群似乎处于健康状态,我不明白为什么它不会同步特定的 DDL 操作。我在一些 innodb 测试表上尝试了其他 DDL 操作,它就像一个魅力。
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| wsrep_cluster_state_uuid | 213a9d66-d207-11e8-b7bb-733e94f6ddc5 |
| wsrep_cluster_conf_id | 294 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_status | Primary |
| wsrep_ready | ON |
| wsrep_connected | ON |
| wsrep_local_state_comment | Synced |
| wsrep_local_recv_queue_avg | 0.038462 |
| wsrep_flow_control_paused | 0.000000 |
| wsrep_cert_deps_distance | 18.686275 |
| wsrep_local_send_queue_avg | 0.200000 |
mysql
)是 MyISAM。mysql_upgrade
必须运行。mysql_upgrade
经常更改系统表。因此,除非升级说明以某种方式为您完成任务,否则您必须
mysql_upgrade
在每个节点上运行。