我正在研究在我的代码上以只读模式运行MySQL的效果。我正在运行MySQL 5.5.49.0和PHP 5.5.9.1(在Ubuntu 14.04上)。我使用以下命令将数据库设置为只读:
flush tables with read lock;
set global read_only = 1;
如果我通过CLI连接并尝试插入,我得到:
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
如果我通过PDO与同一用户连接:
$pdo = new PDO('mysql:dbname=database;host=host', 'username', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
try {
$result = $pdo->exec('insert ***');
die(var_dump(__LINE__, $result));
} catch (Exception $e) {
die(var_dump(__LINE__, $e->getMessage()));
}
浏览器无限加载。我尝试了一个具有良好旧的mysql_connect和mysql_query的模拟结构,在这种情况下,只读情境被忽略,返回0。也不是一个可行的解决方案。
如果数据库以只读模式运行,我宁愿不检查先发制人,因为通常情况并非如此,因此我可以在每次请求时保存额外的查询。
所以我的问题是:我如何从Mysql / PDO获得任何其他形式的异常或警告?
答案 0 :(得分:0)
事实证明我使用具有SUPER权限的用户连接到我的本地开发数据库(使用我的Vagrant实例)。拥有SUPER权限的用户不受read_only选项的影响。
当我切换到普通用户时,我确实遇到了异常。
您可以考虑的另一个选择是使用super_read_only而不是普通的read_only。