在使用 mariadb galera 集群时,发现数据库数据一直不同步,刚开始一直以为是哪里配置的问题,最后才发现…
原来 MariaDB Galera Cluster 仅支持 InnoDB
存储引擎,对于 MyISAM
的支持仅是实验室性质的,不适用在生产环境,具体可见 wsrep_replicate_myisam 变量。
关于 MariaDB Galera Cluster 其他的一些限制见页面:MariaDB Galera Cluster - Known Limitations。
而我们之前初始化时导入的表很大一部分是 MyISAM 引擎的,这也就是为什么一直无法同步的原因。 😩
那么如何批量的将 MyISAM 的表修改为 InnoDB 呢?
可以用如下命令生成批量修改指定数据库(用 table_schema 指定)中的所有表引擎的 Alert 语句:
1 | SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') |
也可以生成修改所有库中的表引擎:
1 | SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') |
如:
1 | mysql> SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',table_name,' ENGINE=InnoDB;') FROM information_schema.tables |
复制生成的 Alert 语句运行即可。
参考: