我使用 MariaDB Galera 10.0.16 成功运行了一个由 3 个数据库服务器组成的集群。此设置处理了我们创建的几个 Web 应用程序,以及十几个中等流量的 Joomla 网站。
我的问题是 Galera 不喜欢 MyISAM。通常,当安装 Joomla 中的插件或组件时,它会在其 install.sql 中设置 MySQL 引擎,如下所示:
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
当发生这种情况时,一个简单的 Joomla 组件安装可以(并且已经)中断复制。
有没有办法强制服务器忽略 ENGINE 设置?
谢谢。
这是一个很好的问题。人们在使用 NDB cluster 和 Galera 时往往希望这样。
正确的答案是你应该报告插件创建者创建没有引擎定义的表,所以你可以用“default_engine”选项设置它。虽然在其他情况下,您可以禁用引擎并强制使用默认引擎替换引擎,但这不是一个好的做法,不鼓励在最新版本上使用 MyISAM。
事实是,一旦开发人员编写
ENGINE=X
,它就会按照编写的那样强制创建引擎。实现这一目标的唯一方法是即时重写查询。这在 MySQL 5.7(尚未正式发布)中可用,带有几个插件。我现在能想到的唯一方法是使用像ProxySQL或MySQL Proxy这样的 SQL 代理。请注意,其中一些因性能不佳而臭名昭著,因此您可能只想在插件激活/禁用时启用它。显然还有另一种选择:下载 MariaDB Cluster 源代码,在
CREATE TABLE
语法上禁用 MyISAM,然后编译!?Percona XtraDB Cluster 已经具有此功能(enforce_storage_engine),对于 MariaDB,我向 Colin 报告了一个待处理的功能请求...
https://mariadb.atlassian.net/browse/MDEV-6858