连接 MySQL 集群失败该如何处理?

连接 MySQL 集群失败该如何处理?

我们公司创建了两台 MySQL 服务器,它们使用主主策略保持同步。双机集群使用以下方式进行管理:韓國。这只是一个高可用性集群,这意味着每次只向一台 MySQL 服务器发送数据,另一台服务器仅在其中一台服务器发生故障时保留用于备份。

为了测试我们的集群(我以前没有做过这种事),我编写了一个脚本,将 100000 行写入数据库的表中。当此脚本运行时,我登录到接收数据的服务器(即共享 IP 指向的服务器)并重新启动它,尝试模拟硬件故障。

在某些情况下,脚本会继续运行。然而,在其他一些情况下,我会收到臭名昭著的PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away异常,或者PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction异常等等。

我该如何处理这些错误?我觉得对于为服务器集群编程有一个我没有意识到的简单事实。

答案1

每个错误消息在这里翻译不同的含义

为了MySQL 服务器已消失

大多是因为服务器超时,连接关闭。将max_allowed_packetmy.cnf 的值调大,重启 MySQL 后检查

[mysqld]
max_allowed_packet = 32M

为了僵局

大部分情况是因为多个事务同时持有和请求锁,从而产生依赖关系。如果您也发布查询,这将很有帮助。尝试找出确切原因

mysql> SHOW ENGINE INNODB STATUS\G;

关联也可能被证明是经过深思熟虑的

相关内容