MySQL错误ERROR 1786 (HY000)解决

本文探讨了MySQL5.7.x版本中GTID模式下使用CREATETABLE...SELECT语句创建表的问题,该操作可能导致GTID一致性错误。文章详细解释了这一限制的原因,并提供了关闭GTID模式的具体步骤,以确保此类语句能够成功执行。
务上需要支持create table XXX as select * from XXX; 这种创建表的语法,但是MySQL5.7.x版本里面gtid是开启的,会报错

ERROR 1786 (HY000):Statement violates GTID consistency: CREATE TABLE ... SELECT.
官方说明:https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-restrictions.html

CREATE TABLE ... SELECT statements.  CREATE TABLE ... SELECT is not safe for statement-based replication. When using row-based replication, this statement is actually logged as two separate events—one for the creation of the table, and another for the insertion of rows from the source table into the new table just created. When this statement is executed within a transaction, it is possible in some cases for these two events to receive the same transaction identifier, which means that the transaction containing the inserts is skipped by the slave. Therefore, CREATE TABLE ... SELECT is not supported when using GTID-based replication.
解决办法关闭GTID模式:
my.cnf里面修改参数为:

gtid_mode = OFF
enforce_gtid_consistency = OFF
重启MySQL,再次创建成功:

mysql> show variables like '%gtid_mode%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | OFF   |
+---------------+-------+
1 row in set (0.01 sec)

mysql> show variables like '%enforce_gtid_consistency%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| enforce_gtid_consistency | OFF   |
+--------------------------+-------+
1 row in set (0.01 sec)

mysql> create table t1 as select * from BS_CONT;
Query OK, 0 rows affected (0.12 sec)
----------当你发现自己的才华撑不起野心时,就请安静下来学习吧---------

 

<think>好的,我现在需要处理用户关于MySQL错误2059HY000的问题。用户提到他们在连接MySQL时遇到了这个错误,具体是身份验证插件'caching_sha2_password'无法加载。我需要先理解这个错误的原因,然后找到正确的解决方案。 首先,我应该回忆一下MySQL的身份验证机制。从MySQL8.0开始,默认的身份验证插件从'mysql_native_password'改为了'caching_sha2_password'。这个改变可能导致旧的客户端或某些驱动程序不兼容,从而出现无法加载插件的错误。用户可能正在使用一个不支持新插件的客户端版本,比如某些老版本的PHPmysql扩展或者旧的MySQL连接器。接下来,我需要参考用户提供的引用内容。根据引用[1],解决方案包括修改MySQL的配置文件my.cnf,设置默认的身份验证插件为mysql_native_password,然后修改用户密码并刷新权限。用户给出的步骤是删除my.cnf中的注释或添加相关配置,然后执行SQL命令来更改用户认证方式和密码。此外,引用[2]提到在处理老旧MySQL版本时可能需要注意内存泄漏问题,但这可能与当前错误关系不大,但需要留意线程清理的配置。现在需要确认解决方案的正确性。修改默认身份验证插件确实可以解决兼容性问题,但用户需要确保在修改配置文件后重启MySQL服务,否则更改不会生效。另外,ALTERUSER语句中的BY'MyNewPass'部分需要替换为用户的实际密码,这一点需要提醒用户注意。另外,用户可能需要更新他们的客户端工具或驱动程序以支持新的身份验证插件,但这可能不是所有环境都可行,特别是在生产环境中。因此,修改服务器配置可能更直接有效。 还需要考虑用户是否有权限修改my.cnf文件,以及如何找到该文件的位置。通常,my.cnf位于/etc/mysql/或/etc/目录下,但不同安装方式可能路径不同。如果用户无法找到该文件,可能需要指导他们创建或查找正确的配置位置。 此外,执行FLUSHPRIVILEGES命令是为了让权限更改立即生效,但ALTERUSER已经隐式地执行了权限刷新,所以这一步可能不是必须的,但为了保险起见,按照引用中的步骤执行是合理的。 最后,需要验证解决方案是否有效。用户可能需要在修改配置并重启MySQL后,尝试重新连接,确保使用新的身份验证插件。如果仍然出现错误,可能需要检查配置文件是否正确加载,或者是否有其他配置冲突。 总结步骤应该是:修改配置文件,重启MySQL服务,更改用户认证方式,设置密码,然后测试连接。需要确保每一步都正确执行,避免遗漏。</think>### MySQL错误2059 (HY000) 解决方案 当连接MySQL出现`ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded`时,通常是由于客户端不支持MySQL 8.0默认的`caching_sha2_password`身份验证插件。以下是分步解决方案: --- #### **步骤1:修改MySQL配置文件** 1. 打开MySQL配置文件`my.cnf`(路径可能为`/etc/my.cnf`或`/etc/mysql/my.cnf`)。 2. 添加或取消注释以下配置项: ```ini default-authentication-plugin=mysql_native_password ``` 此配置将默认身份验证方式改为旧版兼容模式[^1]。 --- #### **步骤2:重启MySQL服务** ```bash systemctl restart mysql # 或 service mysql restart ``` --- #### **步骤3:修改用户密码认证方式** 1. 登录MySQL: ```bash mysql -u root -p ``` 2. 执行以下SQL命令修改用户认证方式: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; FLUSH PRIVILEGES; ``` 将`你的新密码`替换为实际密码[^1]。 --- #### **步骤4:验证连接** 重新使用客户端连接MySQL错误应已解决。 --- #### **替代方案:升级客户端驱动** 如果无法修改服务端配置,可升级客户端工具或驱动(如MySQL Connector/J、PHP PDO等)至支持`caching_sha2_password`的版本。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹蜻蜓vYv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值