数据库内核月报

数据库内核月报 - 2014 / 09

MariaDB · 主备复制 · CREATE OR REPLACE

Author:

MariaDB 10.0.8 版本增加了一个CREATE OR REPLACE TABLE语法,这个语法的目的是让Replication更加可靠,为什么这个语句能让复制更可靠呢?

例如用户使用CREATE … SELECT语句,而这个语句回滚了又重新执行,备库有可能先收到一个CREATE语句,但是没收到INSERT的Events,主库重做一遍之后,备库收到CREATE语句时就会失败,而CREATE OR REPLACE则可以避免这个问题,存在的表会被替换掉。

最基本的使用例子:

CREATE OR REPLACE TABLE table_name (a int);

这个语句其实等价于:

DROP TABLE IF EXISTS table_name;
CREATE TABLE table_name (a int);

这两个语句的执行结果。

使用CREATE OR REPLACE TABL必须意识到的问题:

相关的新增参数:

 slave_ddl_exec_mode

 描述: Slave控制如何执行DDL的Event的模式。可选值有STRICT、IDEMPOTENT (默认值)。

  在 IDEMPOTENT 模式下,Slave不会因为那些不会导致主备不一致的DDL执行失败而停止。

  尤其是CREATE TABLE 会被当做 CREATE OR REPLACE TABLE,而 DROP TABLE 会被当做DROP TABLE IF EXIS TS.

 默认值: IDEMPOTENT

 可选值: IDEMPOTENT, STRICT