fuhao009 发表于 2023-1-9 11:14:02

执行sql报错

本帖最后由 fuhao009 于 2023-1-9 13:41 编辑

greatesql-8.0.25-16 初始化 GreatSQL/bin/mysqld --no-defaults --datadir=/data/mysql --initialize --user=mysql


执行sql报错如下:


(Mon Jan9 11:06:21 2023)[(none)]>ALTER USER USER() IDENTIFIED BY 'Test@123';
ERROR 3100 (HY000): Error on observer while running replication hook 'before_commit'.



mysql.log报错如下
Run function 'before_commit' in plugin 'group_replication' failed

fuhao009 发表于 2023-1-9 13:42:22

group_replication_group_seeds 填错了,导致启动很慢,这个时候无法执行SQL

yejr 发表于 2023-1-9 14:05:19

fuhao009 发表于 2023-1-9 13:42
group_replication_group_seeds 填错了,导致启动很慢,这个时候无法执行SQL

是的,启动MGR期间,是没办法执行DML的。
这时候可以查看数据库日志,以及show processlist查看数据库当前状态,应该能更快发现原因。

yejr 发表于 2023-1-9 14:07:59

yejr 发表于 2023-1-9 14:05
是的,启动MGR期间,是没办法执行DML的。
这时候可以查看数据库日志,以及show processlist查看数据库当 ...

在深入浅出系列文章中 https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/deep-dive-mgr/deep-dive-mgr-11.md 有详细介绍,启用MGR后,SQL执行的过程。
这时候如果看到关键字 Error on observer while running replication hook 'before_commit'. 就应该立即想到是这方面的问题了。

MGR是以Plugin(插件)的方式集成到MySQL中,可以简单灵活部署,它在MySQL进行事务处理、Binlog传输和持久化等逻辑处理时,预埋了一些(Hook)钩子,在钩子上注册函数处理MGR相关逻辑。

以用户提交事务为例:

用户线程发出commit,请求提交事务,处在Server层。
Server层调用MGR处理层,将事务信息通过Paxos层进行同步,用户线程等待。
MGR处理层处理Paxos同步后的消息,唤醒用户线程,返回到Server层。
页: [1]
查看完整版本: 执行sql报错