【问题标题】:Django/Docker-compose: Retry Database Connection when: django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")Django / Docker-compose:重试数据库连接时:django.db.utils.OperationalError:(2002,“无法连接到'db'(115)上的MySQL服务器”)
【发布时间】:2021-01-16 01:56:30
【问题描述】:
【问题讨论】:
标签:
python
mysql
django
docker-compose
retry-logic
【解决方案1】:
在manage.py中重启django cassandra连接
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import logging
import os
import sys
from time import sleep
from cassandra.cluster import NoHostAvailable
from django.core.management import execute_from_command_line
MAX_RETRIES_NUM = 10
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
try:
from django.core.management.commands.runserver import Command
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
from django.db import connections
conn = connections['default']
no_host_available = True
retry_count = 0
sleep_time = 1
while no_host_available:
try:
conn.connect()
except NoHostAvailable:
if retry_count == MAX_RETRIES_NUM:
sys.exit()
logging.warning(f'Error de conexión con la base de datos. Reintentando conexión en {sleep_time}s')
sleep(sleep_time)
else:
no_host_available = False
sleep_time *= 1.5
retry_count += 1
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()