DELETE FROM 时失去连接,而不是 SELECT
Lost connection on DELETE FROM, not on SELECT
如果某个特定会员在另一个 table 中不再有子记录,我将尝试记录该会员的记录。当我提交 DELETE FROM 时,我收到一个丢失的连接或 MySQL 服务器已经消失。如果我 SELECT 来自数据库的相同记录,我会得到一个有效的 return。我在下面包含了互动:
SELECT m.* FROM Member m LEFT OUTER JOIN MemberAssociation ma ON m.memberID = ma.memberID WHERE m.scanCode = 12345 AND ma.associationCode IS NULL;
/* The expected Member records, which appear to be valid. 2 Rows */
DELETE m.* FROM Member m LEFT OUTER JOIN MemberAssociation ma ON m.memberID = ma.memberID WHERE m.scanCode = 12345 AND ma.associationCode IS NULL;
ERROR 2013 (HY000): Lost connection to MySQL server during query
DELETE m.* FROM Member m LEFT OUTER JOIN MemberAssociation ma ON m.memberID = ma.memberID WHERE m.scanCode = 12345 AND ma.associationCode IS NULL;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: my_database
ERROR 2013 (HY000): Lost connection to MySQL server during query
有没有可能我可以做些什么来解决这个问题,或者更有可能是我偶然发现了软件错误?
我是运行innodb_version:5.6.19-67.0 和 MariaDB 版本:10.0.13-MariaDB。成员 table 是一个 InnoDB table。
请参阅 MySQL:MariaDB 了解发生这种情况的背景。
A related SO query也讨论了同样的问题。
基本上,您的 DELETE 查询似乎花费的时间太长,MySQL server-client 连接超时。
编辑根据 OP
的回复
根据 this link 损坏的 Innodb table 也可能导致此问题。参考以下 2 links 的诊断和故障排除过程:
我已经自己解决了这个问题,并对以后遇到类似问题的人提出一些建议。
就我而言,MySQL 由于 table 损坏而失败。我使用 CHECK TABLE
工具发现了错误。
CHECK TABLE Member;
+-------------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------------------+-------+----------+----------+
| my_database.Member | check | status | OK |
+-------------------------+-------+----------+----------+
CHECK TABLE MemberAssociation;
ERROR 2013 (HY000): Lost connection to MySQL server during query
然后我尝试复制数据,但由于 PRIMARY KEY
问题无法复制:
CREATE TABLE MemberAssociation_recover LIKE MemberAssociation
INSERT INTO MemberAssociation_recover SELECT * FROM MemberAssociation;
ERROR 1062 (23000): Duplicate entry 'XXXXX-YYYYY-ZZZZ' for key 'PRIMARY'
明显有问题。
此时我做了一个 mysqldump
并发现 MemberAssociation
table 中的大多数行都是重复的。因为这是一个开发数据库,所以我通过以下过程恢复了数据:
CREATE TEMPORARY TABLE MemberAssociationIgnore LIKE MemberAssociation;
INSERT IGNORE INTO MemberAssociationIgnore SELECT * FROM MemberAssociation;
DELETE FROM MemberAssociation;
INSERT INTO MemberAssociation SELECT * FROM MemberAssociationIgnore;
注意:在生产系统上,我不会遵循上述过程。我建议将损坏的 table 中的数据复制到没有密钥的新 table 中,并在应用删除的密钥之前手动清除所有重复项,然后将数据复制回原始 [=30] =].
如果某个特定会员在另一个 table 中不再有子记录,我将尝试记录该会员的记录。当我提交 DELETE FROM 时,我收到一个丢失的连接或 MySQL 服务器已经消失。如果我 SELECT 来自数据库的相同记录,我会得到一个有效的 return。我在下面包含了互动:
SELECT m.* FROM Member m LEFT OUTER JOIN MemberAssociation ma ON m.memberID = ma.memberID WHERE m.scanCode = 12345 AND ma.associationCode IS NULL;
/* The expected Member records, which appear to be valid. 2 Rows */
DELETE m.* FROM Member m LEFT OUTER JOIN MemberAssociation ma ON m.memberID = ma.memberID WHERE m.scanCode = 12345 AND ma.associationCode IS NULL;
ERROR 2013 (HY000): Lost connection to MySQL server during query
DELETE m.* FROM Member m LEFT OUTER JOIN MemberAssociation ma ON m.memberID = ma.memberID WHERE m.scanCode = 12345 AND ma.associationCode IS NULL;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: my_database
ERROR 2013 (HY000): Lost connection to MySQL server during query
有没有可能我可以做些什么来解决这个问题,或者更有可能是我偶然发现了软件错误?
我是运行innodb_version:5.6.19-67.0 和 MariaDB 版本:10.0.13-MariaDB。成员 table 是一个 InnoDB table。
请参阅 MySQL:MariaDB 了解发生这种情况的背景。
A related SO query也讨论了同样的问题。
基本上,您的 DELETE 查询似乎花费的时间太长,MySQL server-client 连接超时。
编辑根据 OP
的回复根据 this link 损坏的 Innodb table 也可能导致此问题。参考以下 2 links 的诊断和故障排除过程:
我已经自己解决了这个问题,并对以后遇到类似问题的人提出一些建议。
就我而言,MySQL 由于 table 损坏而失败。我使用 CHECK TABLE
工具发现了错误。
CHECK TABLE Member;
+-------------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------------------+-------+----------+----------+
| my_database.Member | check | status | OK |
+-------------------------+-------+----------+----------+
CHECK TABLE MemberAssociation;
ERROR 2013 (HY000): Lost connection to MySQL server during query
然后我尝试复制数据,但由于 PRIMARY KEY
问题无法复制:
CREATE TABLE MemberAssociation_recover LIKE MemberAssociation
INSERT INTO MemberAssociation_recover SELECT * FROM MemberAssociation;
ERROR 1062 (23000): Duplicate entry 'XXXXX-YYYYY-ZZZZ' for key 'PRIMARY'
明显有问题。
此时我做了一个 mysqldump
并发现 MemberAssociation
table 中的大多数行都是重复的。因为这是一个开发数据库,所以我通过以下过程恢复了数据:
CREATE TEMPORARY TABLE MemberAssociationIgnore LIKE MemberAssociation;
INSERT IGNORE INTO MemberAssociationIgnore SELECT * FROM MemberAssociation;
DELETE FROM MemberAssociation;
INSERT INTO MemberAssociation SELECT * FROM MemberAssociationIgnore;
注意:在生产系统上,我不会遵循上述过程。我建议将损坏的 table 中的数据复制到没有密钥的新 table 中,并在应用删除的密钥之前手动清除所有重复项,然后将数据复制回原始 [=30] =].