Error number: MY-013099; Symbol: ER_RPL_GTID_UNSAFE_STMT_CREATE_SELECT; SQLSTATE: HY000
Message: Statement violates GTID consistency: CREATE TABLE … SELECT.
错误说明
ER_RPL_GTID_UNSAFE_STMT_CREATE_SELECT错误代码表示,使用Global Transaction ID(GTID)复制时不能使用CREATE或者SELECT语句,因为它们暴露了数据在节点之间不安全的特性。该错误时MySQL报出来提示用户, GTID复制模式中不能将CREATE还是SELECT语句同步到不同的服务器。
常见案例
使用Global Transaction ID(GTID)复制时在MySQL server端尝试执行以下语句:
CREATE TABLE tab1 (
ID int PRIMARY KEY
);
SELECT * FROM tab1;
此时,MySQL server会报出 ER_RPL_GTID_UNSAFE_STMT_CREATE_SELECT 错误。
解决方法
1. 为了避免此错误,在MySQL server端尽量不要使用CREATE和SELECT语句,而是使用INSERT语句。
2. 将MySQL server端复制模式改为传统复制(不使用GTID)模式,从而释放CREATE和SELECT语句。
3. 在MySQL server中授予replication slave权限,使用slave可以执行CREATE或者SELECT等被拒绝的动作。
4. 更新MySQL服务器到最新版本,目前新版本可以使用GTID安全的执行CREATE和SELECT语句。