python mysql ошибка подключения MAX_QUESTIONS ресурс - PullRequest
0 голосов
/ 10 июля 2020

Я периодически (каждые 20 минут) извлекаю данные из базы данных MySQL на небольшом сервере. Мой поток данных работал без сбоев в течение 2 недель, пока сегодня он не сломался и получил

mysql.connector.errors.ProgrammingError: 1226 (42000): User 'HH' has exceeded the 'max_questions' resource (current value: 60)

. Я пытался перезапустить скрипт, но продолжал получать те же ошибки. Каждый раз, когда мой скрипт запускается, он выполняет 8 запросов, итого 24 запроса в час, как я превышаю ресурс? И каждый запрос довольно прост: я прошу записи с определенным идентификатором станции и после определенной временной метки. Вот две функции, которые я использую для запроса данных

import pandas as pd
import mysql.connector as mysql
from datetime import datetime, timedelta

    def grabSoilAfter(self, lastTime, station_name, sensor_id):
        
        db = mysql.connect(
            host = self.host,
            user = self.user,
            database = self.database,
            password = self.password
            )
        cursor = db.cursor()
        

        cols = ['data' + str(k) for k in range(0, 7)]
        cols_str = ', '.join(cols)
        

        sql_command = "select add_utc, " + cols_str + ' from weatherdata' +   \
                        ' where station_ID = \''+station_name +     \
                        '\' and add_utc > \'' + lastTime.strftime('%Y-%m-%d %H:%M:%S') + '\' ' +   \
                        'order by add_utc asc'   
        cursor.execute(sql_command)
        dat = cursor.fetchall() ## it returns a list of all databases present
        dat_pd = pd.DataFrame(dat, columns = ['time_utc','4inch', '8inch', '12inch', '16inch', '20inch', '24inch', '28inch'])
         
        cursor.close()
        db.close()
        
        return dat_pd

    def grabWeatherAfter(self, lastTime, station_name, sensor_id):
        
        db = mysql.connect(
            host = self.host,
            user = self.user,
            database = self.database,
            password = self.password
            )            
        cursor = db.cursor()
        
        cols = ['data' + str(k) for k in range(0, 7)]
        cols_str = ', '.join(cols)
        

        sql_command = "select add_utc, " + cols_str +' from weatherdata' +   \
                        ' where station_ID = \''+station_name +     \
                        '\' and add_utc > \'' + lastTime.strftime('%Y-%m-%d %H:%M:%S') + '\' ' +   \
                        'order by add_utc asc' 
        dat = pd.read_sql_query(sql_command, db)
        db.close()

Для функции grabWeatherAfter() я использую pandas.dataframe.read_sql_query для автоматического форматирования данных. Что мне делать, чтобы уменьшить мой QUESTIONS до уровня ниже 60?

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вы можете попробовать это на phpmyadmin или mysql console, но пользователь, в который вы вошли, должен иметь разрешения на внесение этих изменений.

Запускать его как обычный запрос, неважно, какая база данных выбрано. Важно то, что ваш пользователь db должен иметь для этого права.

Для неограниченного вы можете установить max_questions на 0 или вы можете установить его на любое указанное c значение

SET @MAX_QUESTIONS=0;
FLUSH PRIVILEGES;
0 голосов
/ 13 июля 2020

Предполагая, что «max_questions» - это какая-то проблема с преобразованием «max_connections», вам, вероятно, нужно прекратить инициализацию нового соединения с базой данных для каждого запроса и вместо этого повторно использовать соединение.

...