laravel 5.5,对于mysql-proxy的sql操作一直报错?

发布于 2022-09-06 12:45:29 字数 1817 浏览 25 评论 0

经过检测mysql-proxy经常自动挂掉重启,已弃用。改用mycat



在navicat客户端中登录mysql-proxy进行操作正常
在laravel中执行任何sql语句都会报错

SQLSTATE[HY000]: General error: 1243 Unknown prepared statement handler (X) given to 
mysqld_stmt_execute

以下为原问题

最近在做毕业设计项目。
Mysql读写分离,主从复制。
Mysql-proxy在A服务器,B服务器 Master负责写,C服务器 Slave负责读。
在navicat客户端中登录mysql-proxy进行操作正常
执行php artisan migrate抛出如下错误

PS C:\phpStudy\WWW\XXX\test> php artisan migrate
In Connection.php line 647:
  SQLSTATE[HY000]: General error: 1243 Unknown prepared statement handler (2) given to 
mysqld_stmt_execute (SQL: select * from information_schema.tables where table_schema = 
shop and table_name = migrations)
In MySqlConnector.php line 57:
  SQLSTATE[HY000]: General error: 1243 Unknown prepared statement handler (2) given to 
mysqld_stmt_execute

百度了一下说是权限问题?我看了数据库information_schema中的表tables,确实没有table_schema = shop and table_name = migrations
这种怎么解决?Google没搜出来。
错误如图
*
dzx是主从复制账户,proxy是读写分离的代理账户
proxy配置如图
图片描述
---
账户权限如图
数据库权限

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

故事灯 2022-09-13 12:45:29

感谢信任与邀请 , 下午有时间我看下 . 下午修改答案 . 公司上午上线一项内容 .

--------------------------- 下午补充 -----------------------------

您好 , 我刚看了下您的问题 , 首先呢 , 看起来是Lavarel(应该没拼错)框架一些内容 , 可惜我没用过L框架 . 不过 , 我有几点或许能帮到你 .
1 . 看起来php的pdo和mysql扩展都没问题 .
2 . 其次是你在proxy上已经测试通过了 , 说明mysql配置都是没问题的 .
3 . information_schema库是mysql的必备核心的一个库 , 其中放的是数据表数据库的信息 . 那么select * from information_schema where table_schema=shop实际上要要查询您的mysql中有没有一个叫shop的数据库 , 再加上 and table_name = migrations条件就是说要找mysql中shop库中的migrations表 . 你可以检查一下是否有这个库和这个表 .

别的 , 我也暂时帮不了你了 .

想你的星星会说话 2022-09-13 12:45:29

你好?我最近也在玩laravel想用mycat做读写分离可是怎么样配置连接呢

似最初 2022-09-13 12:45:29

其实laravel自带读写分离的配置.... 在数据库配置中,可以写一个: read配置和write配置.

'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
        //可以配置不同的账号密码端口
    ],
    'write' => [
        'host' => '196.168.1.2'
        //可以配置不同的账号密码端口
    ],
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
],
貪欢 2022-09-13 12:45:29

我遇到了一样的问题,似乎mysql-proxy无法接受预处理语句
虽然题主已经改了,还是留下一个解决办法
在config/database.php中设置PDO模拟的预处理语句,然后发给mysql正常的sql

            'options'   =>[
                PDO::ATTR_EMULATE_PREPARES => true,
            ],

经过简单测试,可以正常执行CURD操作

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文