Как обнаружить временные сбои в MySQL? - PullRequest
0 голосов
/ 23 мая 2018

Я пишу утилиту 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 и PEP 249 в MysQL Connector / Python нелегко работать.Например, ошибка 2013 (потерянное соединение с сервером) отображается на InterfaceError, а ошибка 2006 (сервер ушел) отображается на OperationalError, в то время как в обоих случаях следует повторить попытку.

Поэтому мне было интересно, существует ли традиционный способ (вероятно, основанный на errno) для классификации таких ошибок.

1 Ответ

0 голосов
/ 04 июня 2018
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

можете ли вы попробовать подобные вещи до или после передачи данных, вы можете проверить связь между базами данных, тогда, если все в порядке, вы можете выполнить запрос

...