鍍金池/ 問答/PHP  數(shù)據(jù)庫/ laravel 5.5,對于mysql-proxy的sql操作一直報錯?

laravel 5.5,對于mysql-proxy的sql操作一直報錯?

經過檢測mysql-proxy經常自動掛掉重啟,已棄用。改用mycat



在navicat客戶端中登錄mysql-proxy進行操作正常
在laravel中執(zhí)行任何sql語句都會報錯

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

以下為原問題

最近在做畢業(yè)設計項目。
Mysql讀寫分離,主從復制。
Mysql-proxy在A服務器,B服務器 Master負責寫,C服務器 Slave負責讀。
在navicat客戶端中登錄mysql-proxy進行操作正常
執(zhí)行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

百度了一下說是權限問題?我看了數(shù)據(jù)庫information_schema中的表tables,確實沒有table_schema = shop and table_name = migrations。
這種怎么解決?Google沒搜出來。
錯誤如圖
*
dzx是主從復制賬戶,proxy是讀寫分離的代理賬戶
proxy配置如圖
圖片描述
---
賬戶權限如圖
數(shù)據(jù)庫權限

回答
編輯回答
拼未來

你好?我最近也在玩laravel想用mycat做讀寫分離可是怎么樣配置連接呢

2017年12月9日 10:19
編輯回答
溫衫

其實laravel自帶讀寫分離的配置.... 在數(shù)據(jù)庫配置中,可以寫一個: 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'    => '',
],
2017年6月23日 03:27
編輯回答
過客

感謝信任與邀請 , 下午有時間我看下 . 下午修改答案 . 公司上午上線一項內容 .

--------------------------- 下午補充 -----------------------------

您好 , 我剛看了下您的問題 , 首先呢 , 看起來是Lavarel(應該沒拼錯)框架一些內容 , 可惜我沒用過L框架 . 不過 , 我有幾點或許能幫到你 .
1 . 看起來php的pdo和mysql擴展都沒問題 .
2 . 其次是你在proxy上已經測試通過了 , 說明mysql配置都是沒問題的 .
3 . information_schema庫是mysql的必備核心的一個庫 , 其中放的是數(shù)據(jù)表數(shù)據(jù)庫的信息 . 那么select * from information_schema where table_schema=shop實際上要要查詢您的mysql中有沒有一個叫shop的數(shù)據(jù)庫 , 再加上 and table_name = migrations條件就是說要找mysql中shop庫中的migrations表 . 你可以檢查一下是否有這個庫和這個表 .

別的 , 我也暫時幫不了你了 .

2018年6月8日 11:31
編輯回答
涼汐

我遇到了一樣的問題,似乎mysql-proxy無法接受預處理語句
雖然題主已經改了,還是留下一個解決辦法
在config/database.php中設置PDO模擬的預處理語句,然后發(fā)給mysql正常的sql

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

經過簡單測試,可以正常執(zhí)行CURD操作

2017年4月25日 01:20