Error number: MY-013234; Symbol: ER_RPL_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION; SQLSTATE: HY000
Message: Statement violates GTID consistency: ALTER TABLE … ADD COLUMN .. with expression as DEFAULT.
以内
MySQL错误号MY-013234 (Symbol:ER_RPL_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION & SQLSTATE: HY000)指示在使用GTID复制时,MySQL服务器上的一些表更改不允许(是不安全的) 。
错误说明:
MY-013234 (Symbol: ER_RPL_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION & SQLSTATE: HY000)错误指出,在使用GTID复制的情况下,试图进行的更改包括增加一个列并且为它指定默认表达式是不安全的。(为此类更改使用复制忽略)普通表更改无论是否使用复制,都不起作用。
这个错误发生在当MySQL服务器正在使用GTID复制作为复制方法时,当用户尝试添加新列,同时指定默认值表达式时。例如,如果用户执行以下查询,就可能会发生此错误:
ALTER TABLE tbl_name ADD COLUMN new_column INTEGER DEFAULT (select count(*) from other_tbl);
解决办法:
1. 检查复制细节,确保MySQL服务器使用的是“半同步复制”或“异步复制”,而不是GTID复制,因为GTID复制会阻止执行类似查询的更改;
2. 改变复制方法和使用复制忽视,例如,将“ignore_table”参数设置为“replicate-wild-ignore-table”即可;
3. 将新列添加为无默认值且不为空的属性,然后再使用“UPDATE”语句将新列设置为其默认值;
4. 将更改拆分为两步操作,将新列添加为无默认值且不为空的属性,然后在子查询中使用“ALTER TABLE”语句将新列的默认值设置为子查询的结果。