I am getting this error everyday

OperationalError

pymysql.err.OperationalError: (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111] Connection refused)”)

Traceback (most recent call last)

  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py”, line 649, in connect

    sock = socket.create_connection(
           
    
  • File “/usr/lib/python3.11/socket.py”, line 863, in create_connection

    raise exceptions[0]
    ^^^^^^^^^^^^^^^^^^^
    
  • File “/usr/lib/python3.11/socket.py”, line 848, in create_connection

    sock.connect(sa)
    ^^^^^^^^^^^^^^^^
    
  • During handling of the above exception, another exception occurred:

  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/app.py”, line 100, in application

    init_request(request)
    ^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/app.py”, line 173, in init_request

    frappe.init(site=site, sites_path=_sites_path, force=True)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/_init_.py”, line 258, in init

    setup_module_map(include_all_apps=not (frappe.request or frappe.job or frappe.flags.in_migrate))
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/_init_.py”, line 1666, in setup_module_map

    apps = get_installed_apps(_ensure_on_bench=True)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/utils/caching.py”, line 47, in wrapper

    return func(*args, **kwargs)
    ^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/_init_.py”, line 1553, in get_installed_apps

    installed = json.loads(db.get_global("installed_apps") or "[]")
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 1133, in get_global

    return self.get_default(key, user)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 1137, in get_default

    d = self.get_defaults(key, parent)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 1153, in get_defaults

    defaults = frappe.defaults.get_defaults_for(parent)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/defaults.py”, line 244, in get_defaults_for

    .run(as_dict=True)
    ^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/query_builder/utils.py”, line 87, in execute_query

    result = frappe.db.sql(query, params, *args, **kwargs)  # nosemgrep
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 207, in sql

    self.connect()
    ^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 112, in connect

    self._conn: "MariadbConnection" | "PostgresConnection" = self.get_connection()
                                               ^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/mariadb/database.py”, line 108, in get_connection

    conn = self._get_connection()
    ^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/mariadb/database.py”, line 114, in _get_connection

    return self.create_connection()
    ^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/mariadb/database.py”, line 117, in create_connection

    return pymysql.connect(**self.get_connection_settings())
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py”, line 361, in __init__

    self.connect()
    ^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py”, line 716, in connect

    raise exc
    ^^^^^^^^^
    
  • During handling of the above exception, another exception occurred:

  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py”, line 649, in connect

    sock = socket.create_connection(
           
    
  • File “/usr/lib/python3.11/socket.py”, line 863, in create_connection

    raise exceptions[0]
    ^^^^^^^^^^^^^^^^^^^
    
  • File “/usr/lib/python3.11/socket.py”, line 848, in create_connection

    sock.connect(sa)
    ^^^^^^^^^^^^^^^^
    
  • During handling of the above exception, another exception occurred:

  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/middlewares.py”, line 16, in __call__

    return super().__call__(environ, start_response)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/werkzeug/middleware/shared_data.py”, line 250, in __call__

    return self.app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/werkzeug/middleware/shared_data.py”, line 250, in __call__

    return self.app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/app.py”, line 80, in application

    app(environ, start_response),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/werkzeug/wrappers/request.py”, line 190, in application

    resp = f(*args[:-2] + (request,))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/app.py”, line 133, in application

    response = handle_exception(e)
    ^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/permissions.py”, line 883, in wrapper

    return fn(e, *args, **kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/app.py”, line 324, in handle_exception

    allow_traceback = frappe.get_system_settings("allow_error_traceback") if frappe.db else False
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/_init_.py”, line 2355, in get_system_settings

    local.system_settings = system_settings = get_cached_doc("System Settings")
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/_init_.py”, line 1182, in get_cached_doc

    doc = get_doc(*args, **kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/_init_.py”, line 1308, in get_doc

    return frappe.model.document.get_doc(*args, **kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/model/document.py”, line 83, in get_doc

    controller = get_controller(doctype)
          ^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/model/base_document.py”, line 67, in get_controller

    return import_controller(doctype)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/model/base_document.py”, line 82, in import_controller

    doctype_info = frappe.db.get_value("DocType", doctype, ("module", "custom", "is_tree"), as_dict=True)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 514, in get_value

    result = self.get_values(
    
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 618, in get_values

    out = self._get_values_from_table(
    
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 891, in _get_values_from_table

    return query.run(as_dict=as_dict, debug=debug, update=update, run=run, pluck=pluck)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/query_builder/utils.py”, line 87, in execute_query

    result = frappe.db.sql(query, params, *args, **kwargs)  # nosemgrep
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 207, in sql

    self.connect()
    ^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/database.py”, line 112, in connect

    self._conn: "MariadbConnection" | "PostgresConnection" = self.get_connection()
                                               ^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/mariadb/database.py”, line 108, in get_connection

    conn = self._get_connection()
    ^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/mariadb/database.py”, line 114, in _get_connection

    return self.create_connection()
    ^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/apps/frappe/frappe/database/mariadb/database.py”, line 117, in create_connection

    return pymysql.connect(**self.get_connection_settings())
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py”, line 361, in __init__

    self.connect()
    ^^^^^^^^^^^^^^
    
  • File “/home/uvtech/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py”, line 716, in connect

    raise exc
    ^^^^^^^^^
    

pymysql.err.OperationalError: (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111] Connection refused)”)

The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.

To switch between the interactive traceback and the plaintext one, you can click on the “Traceback” headline. From the text traceback you can also create a paste of it.

Try to connect mysql server with credentials

Check if it accepting connection

Check this directly from terminal

High chances problem is with mysql credentials or mysql server configuration

@nikunj7943

As @Jigar_Tarpara said - try to ping it using:-

mysqladmin ping -h localhost -u root -p

After investigating this error, it does not appear to be a Frappe or ERPNext bug.

The error
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (Connection refused)")
means that Frappe is unable to reach the MariaDB/MySQL service at the time of the request.

In most cases, this happens because:

  1. MariaDB is not running (service stopped or crashed)
  2. MariaDB is restarting due to low memory or system load
  3. The server is running out of RAM, causing the database process to be killed
  4. A scheduled job (backup / custom script / scheduler) temporarily overloads the database

This is why the issue often occurs daily or at specific times.

Suggested checks and fixes:

  • Verify MariaDB status:

    sudo systemctl status mariadb
    
  • Check MariaDB logs for crashes or OOM kills:

    sudo journalctl -u mariadb
    
  • Ensure the database host in site_config.json is correct (127.0.0.1 or localhost)

  • Confirm MariaDB is listening on the correct interface (bind-address)

  • Add swap space if the server has limited RAM (very common on small VPS setups)

  • Temporarily disable heavy scheduled jobs or custom scripts to verify load-related crashes

Once MariaDB remains stable and accessible, the error no longer occurs.


1 Like