如何检测MySQL中的临时故障?

Mat*_*ois 7 mysql error-handling mysql-python

我正在编写一个python实用程序来在MySQL服务器上执行大量请求.其中一个要求是,如果我们检测到临时故障(例如,如果网络是临时故障),则重试查询(一段时间后).我们使用MySQL Connector/Python.

基本思路是:

try:
    cursor = cnx.get_cursor()
except:
    # If error is temporary, wait and retry
    # else stop
try:  
    cursor.execute(request)
except:
    # If error is temporary, wait and retry
    # else stop
Run Code Online (Sandbox Code Playgroud)

分别处理游标和请求的创建以简化错误处理.

问题是,似乎很难发现值得重试的情况.AFAI,MySQL错误与MysQL Connector/Python中的PEP 249错误之间的映射并不容易.例如,错误2013(与服务器的连接丢失)映射到InterfaceError错误2006(服务器已经消失)映射到,OperationalError而两者都是值得重试的情况.

所以我想知道是否有一种传统方式(可能基于此errno)来对这些错误进行分类.

Tha*_*ara 0

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

for i in range(0,100):
    while True:
        try:
            result = sock.connect_ex(('irc.myserver.net', 6667))
            if result == 0:
                break
            else:
                continue
Run Code Online (Sandbox Code Playgroud)

您可以在进行数据传输之前或之后尝试这种事情吗?您可以检查数据库之间的连接,然后如果一切正常,您可以执行查询