背景:

用的ThinkPHP5的框架。(相比之前的3.2版本,版本5都用了PDO处理数据库)

症状:

报错信息:

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

  

具体的错误SQL,可能是任何一条正常的SQL。

不是每次必报错,是偶尔,但是出现频率较高。经过测试:1000次请求,可能会有30次错误。

错误排查:

本地测试,无问题(PHP直连MySQL)。

线上的ThinkPHP3.2系统,无问题(PHP通过MySQL-proxy代理连接数据库)。

然后排查得出怀疑对象,线上的PHP PDO与MySQL-proxy。

然后给ThinkPHP5的数据库配置加一条:

    // 数据库连接参数
'params' => [
PDO::ATTR_CASE => PDO::CASE_LOWER,
PDO::ATTR_EMULATE_PREPARES => true,
],

线上线下测试,均未再出现此问题。

当然,这个解决方案并不是很好。预处理强制给PHP自身处理,不会更安全。但总归是找到了问题所在。

感谢一起讨论指点的朋友。

后记:用Mycat代理MySQL,无此报错。不过要注意一点:因为Mycat是JAVA开发的,所以对数据库里时间的字段,不能值为 0000-00-00 00:00:00,会报错。

以及感谢如下参考:

http://www.thinkphp.cn/topic/47606.html

https://www.jb51.net/article/56612.htm

http://php.net/manual/zh/pdo.setattribute.php

https://www.kancloud.cn/manual/thinkphp5/211524

https://segmentfault.com/q/1010000012302149/a-1020000013069236

题外:

https://my.oschina.net/u/437615/blog/369481

MySQL-proxy代理导致PHP PDO::ATTR_EMULATE_PREPARES的预处理出错,MySQL报General error: 1243错误的更多相关文章

  1. mysql proxy代理安装和配置

    mysql proxy代理安装和配置 服务器说明: 192.168.1.219   mysql主库(主从复制) 192.168.1.177   mysql从库(主从复制) 192.168.1.202 ...

  2. mysql开启skip-name-resolve 导致root@127.0.0.1(localhost)访问引发的ERROR 1045 (28000)错误解决方案

    为什么配置skip-name-resolve? 由于mysql -h${ip} 远程访问速度过慢, mysql -uroot -p123456 根据网友经验(https://www.cnblogs.c ...

  3. 密码正确 mysql无法登陆 red7.3 上安装mysql5.6后登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passswd :yes)

    集群需要mysql存储元数据,就在前几天还运行好好的,突然就进不去了......还是太菜,遇到的bug少. 引起这种故障的原因有很多......第一个坑比较多,大部分用户也就用第一个就可以解决问题,我 ...

  4. MySQL Proxy 实现MySQLDB 读写分离

    一.简述 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析 ...

  5. MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)

    Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELE ...

  6. [转载] 使用MySQL Proxy解决MySQL主从同步延迟

    原文地址:http://koda.iteye.com/blog/682547 MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方面开发带来了极大的便利.但这种方式有个比较大的缺陷在 ...

  7. 使用MySQL Proxy解决MySQL主从同步延迟

    MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制 是依赖Slave主动向Master发请求来获取数据的, ...

  8. (转)MySQL Proxy使用

    转自: http://www.cnblogs.com/itech/archive/2011/09/22/2185365.html http://koda.iteye.com/blog/788862 h ...

  9. MySQL Proxy使用

    使用MySQL将读写请求转接到主从Server. 一 安装MySQL Proxy MySQL Proxy的二进制版非常方便,下载解压缩后即用. 解压缩的目录为: $mysql-proxy_instal ...

随机推荐

  1. Python 3 进阶 —— 使用 PyMySQL 操作 MySQL

    PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务.存储过程.批量执行等. PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Py ...

  2. ABP框架

    https://aspnetboilerplate.com/ https://aspnetboilerplate.com/Pages/Documents http://www.cnblogs.com/ ...

  3. 单机多实例mysq 8.0l部署安装

    单机多实例mysql部署安装 目的需求 在单台虚拟机部署部署多实例mysql,用于配置mysql replication,MHA等. 思路 多实例安装mysql可以参考<源编译MySQL8.0的 ...

  4. 使用C#编写自己的代码生成器,附代码讲解(一)

    使用过代码生成器的开发人员应该知道,通过代码生成器生成项目的代码,可以大大的减少重复编码的时间,提供项目开发的效率,将自己从繁杂重复的代码中解放出来.现在网络上也有很多的开源的代码生成器或者使用比较广 ...

  5. Linux常用基本命令:三剑客命令之-sed

    sed是一个很强大的文件处理工具,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作 格式:sed [option] [command] [file] 常用命令: a   ∶新 ...

  6. sublime text3快速生成html头部信息

    1.在网站开发过程中尤其写前台页面时要写头部很麻烦,怎么办呢?直接生成不更好吗? 这是快速生成的信息 2.方法: ctrl+shift+P打开命令面板 点击安装控制器 3.输入emmet 安装(以下图 ...

  7. React中使用百度地图API

    今天我们来搞一搞如何在React中使用百度地图API好吧,最近忙的头皮发麻,感觉身体被掏空,所以很久都没来写博客了,但今天我一定要来一篇好吧 话不多说,我们直接开始好吧 特别注意:该React项目是用 ...

  8. Windows下更新 npm 和 nodejs

    一.更新npm // 将npm更新到最新版本 npm install npm@latest -g 二.更新nodejs 1. 首先通过 where node 命令找到nodejs的安装路径 2. 然后 ...

  9. 解决git did not exit cleanly (exit code 128)

    最近在用git提交代码到部门服务器上的时候,总是有 提示 git did not exit cleanly (exit code 128).网上有2种解决方式: 1.替换路径 1.鼠标右键 -> ...

  10. Linux 操作系统下的环境变量设置

    Linux下的环境变量设置 by:授客 QQ:1033553122 1.  问题描述 linux输入命令时经常会出现提示:xxx:Command not found 2.  原因分析 Command ...