MySQL Error number: MY-013099; Symbol: ER_RPL_GTID_UNSAFE_STMT_CREATE_SELECT; SQLSTATE: HY000

文档解释

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语句。

你可能感兴趣的