Not specific to MySQLdb: if you use
localhost as hostname, a MySQL client using the MySQL C libraries will try to connect using UNIX socket (or named pipe on Windows). There are 2 ways around this, but you'll need to grant extra permissions to make it work for both:
Use IP address 127.0.0.1
Use IP address 127.0.0.1 instead of the localhost hostname. This will make MySQL client connect using TCP/IP.
Use option files
The other way is to force the protocol using using option files. For example, in your
~/.my.cnf (or any file you want), add the following:
Now use the connection arguments to read the option file and group:
import MySQLdb cnx = MySQLdb.connect(host='localhost', user='scott', passwd='tiger', read_default_file='~/.my.cnf', read_default_group='python')
The group name does not need to be
python, but it is good not to use
client as it might interfere with other MySQL tools (unless you want that of course).
For setting up permissions, you'll need to use the IP address of localhost, something like:
mysql> GRANT SELECT TO yourdb.* TO 'scott'@'127.0.0.1' IDENTIFIED BY ...;
(Site note: MySQL database drivers such as MySQL Connector/Python do not consider
localhost to be special and connect through TCP/IP right away and you have to explicitly use the