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

时间:2018-05-23 17:34:49

标签: 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

光标的创建和请求分开处理,以简化错误处理。

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

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

2 个答案:

答案 0 :(得分: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

你可以在做数据传输之前或之后尝试这种事情你可以检查数据库之间的连接然后如果所有的事情都可以你可以执行查询

答案 1 :(得分:0)

遗憾的是,您必须编写自己的类来处理此问题。 此代码为alpha / beta。

有用的评论,建议或其他有帮助的

例如: 这个线程安全吗? 这个多类别安全吗?

用法:

连接= mysqlc.Mysql(主机='192.168.1.1',用户='用户',密码='密码',数据库='数据库')

connection.sql(sql)命令会尽最大努力自动处理错误。

---------- Class ------------------

from flask import url_for

flash(Markup('... {} ... <a href="{}" class="alert-link">send it again</a>').format(email, url_for('resend_email')))