У меня есть трехузловой мультимастер MariaDB Galera Cluster, который не синхронизирует изменение определения таблицы InnoDB.
Версия сервера: 10.3.10-MariaDB Сервер MariaDB
wsrep_provider_version: 25.3.24 (r3825)
Таблица mysql.innodb_table_stats
а разница - это data_type / длина поля table_name
.
Операция DDL выполняется в Галера-01 член, использующий mysql_upgrade утилита:
ALTER TABLE innodb_index_stats MODIFY `table_name` varchar(199) COLLATE utf8_bin NOT NULL;
Определение таблицы в Галера-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
Определение таблицы в Галера-02 и Галера-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. Я пробовал с другими операциями DDL на некоторой тестовой таблице innodb, и это работает как шарм.
+--------------------------+--------------------------------------+
| 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
на каждом узле.