Почему MySQL в Amazon RDS продолжает время ожидания моих подключений после изменения переменных времени ожидания? - PullRequest
0 голосов
/ 15 марта 2019

Я арендовал базу данных MySQL через сервис Amazon RDS. Мне удалось привыкнуть к базе данных и я могу манипулировать ею в Python. Я пытаюсь установить время ожидания моего соединения с базой данных MySQL, но мне не везет. Мое подключение к базе данных MySQL через Python всегда прерывается на 10-11 минут.

Чтобы изменить значение сервера MySQL для тайм-аутов, вам нужно получить доступ к его файлу конфигурации. Я взглянул на документацию по Amazon RDS и узнал, что с Amazon это делается через «Группы параметров». Я создал новую группу параметров и установил значения: «connect_timeout», «interactive_timeout» и «wait_timeout» каждый на 1000000. Я связал свою базу данных с этой группой параметров, а затем перезапустил ее. Я подключился к своей базе данных в Python. Примерно через 10 минут бездействия мое соединение все еще прервалось.

Я пытался явно указать время ожидания в Python в дополнение к указанию его в моей группе параметров, но все равно не повезло. Вот код, который я пытаюсь запустить:

import time
import mysql.connector
DataBase = 'DataBase'
Username = 'Username'
Password = 'Password'
Host = 'mydb.randomstring.region.rds.amazonaws.com'
cnx = mysql.connector.connect(
    user=Username, 
    password=Password, 
    host=Host, 
    database=DataBase,
    connect_timeout=1000000
)
mycursor = cnx.cursor()
time.sleep(900)
if cnx.is_connected():
    print('Database did not time out.')
else:
    print('Database timed out.')

>>> Database timed out.

У кого-нибудь есть идеи относительно того, почему это происходит?

Кроме того, я получаю эту ошибку тайм-аута, если я пытаюсь выполнить команду после некоторого периода бездействия, вместо того, чтобы просто спрашивать Python, открыто ли еще мое соединение. Это ошибка, которую я получаю, если пытаюсь выполнить команду после бездействия:

>>> # Establish a MySQL connection and do nothing for about 10 minutes.
>>> sql = "INSERT INTO Table (value_1, value_2) VALUES (%s, %s)"
>>> val = ('A', 'B')
>>> mycursor.execute(sql, val)
Traceback (most recent call last):
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 691, in _read_bytes
    data = self._rfile.read(num_bytes)
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\socket.py", line 589, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    mycursor.execute(sql, val)
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 170, in execute
    result = self._query(query)
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 328, in _query
    conn.query(q)
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 517, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
    result.read()
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 1075, in read
    first_packet = self.connection._read_packet()
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 657, in _read_packet
    packet_header = self._read_bytes(4)
  File "C:\Users\MyUsername\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 699, in _read_bytes
    "Lost connection to MySQL server during query (%s)" % (e,))
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query ([WinError 10054] An existing connection was forcibly closed by the remote host)')

1 Ответ

0 голосов
/ 16 марта 2019

Я нашел решение. Я перехожу на PostgreSQL.

...