Mysql error in erpnext

hi all,

I just have another problem related to mysql in database socket.

I need to setup my mariadb database as multiple instances by mysqld_multi. So the socket file is not in standard as /var/run/mysqld/mysqld.sock, it is another file name, eg. /var/run/mysqld/mysqld1.sock. After i setup my database and restart erpnext, i found it has a error in:

File "/home/easystore/frappe-bench/apps/frappe/frappe/database.py", line 106, in sql
    self.connect()
File "/home/easystore/frappe-bench/apps/frappe/frappe/database.py", line 52, in connect
    use_unicode=True, charset='utf8')
File "/home/easystore/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
File "/home/easystore/frappe-bench/env/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 193, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "No such file or directory")')'

My solution is:

  1. adding a item into site_config.json as

    “db_unix_socket”: “/var/run/mysqld/mysqld3306.sock”,

  2. editing ~/frappe-bench/apps/frappe/frappe/database.py


    class Database:

    def init(self, host=None, user=None, password=None, ac_name=None, use_default = 0):

    self.password = password or frappe.conf.db_password
    self.value_cache = {}

             self.unix_socket = frappe.conf.db_unix_socket or None
    


    def connect(self):
    “”“Connects to a database as set in site_config.json.”“”
    warnings.filterwarnings(‘ignore’, category=MySQLdb.Warning)
    self._conn = MySQLdb.connect(user=self.user, host=self.host, passwd=self.password,
    use_unicode=True, charset=‘utf8’, unix_socket=self.unix_socket)
    self._conn.converter[246]=float

  3. start erpnext again, then it works.

1 Like