I tried to access MySQL from Python 3.3 with the following methods:
import mysql.connector
config = {
\'user\': \'###\',
\'password\': \'******\',
\'h
This means MySQL has denied the connection for one of these reasons:
MySQL's users are actually a combination of a user and a pattern for where you can connect from. e.g. 'user'@'10.0.23.99' or 'test'@'%' or 'fred'@'196.168.123.%' or 'mary'@'%.example.com'
Using a MySQL client, check the "user" table in the "mysql" database to see what users MySQL knows about and what hosts the can connect from.
e.g.
mysql> SELECT user, host FROM mysql.user WHERE user = 'youruser';
Check the MySQL documentation for how to add users. See also how to GRANT access to different tables etc.
http://dev.mysql.com/doc/refman/5.5/en/adding-users.html
http://dev.mysql.com/doc/refman/5.5/en/grant.html
Given that your anonymised IP addresses look the same I suppose you might be running your Python code on the same machine as MySQL is running on. If so, you might find that you are using the server's external IP address whereas perhaps MySQL is configured to accept connections only from localhost/127.0.0.1. If so, try changing the IP address you're connecting to. Also, usually if you're running on the database server, you can connect via a Unix domain socket instead of via TCP/IP. To do this, just leave out the host and port parameters.
I was having this problem when I was trying to transfer data from a python script to a MySQL database on a Raspberry Pi.
When you initially install MySQL it sets you up as the user 'root' with whatever password you enter. If you changed the security settings afterwards to have strong passwords (like I did) your password must have uppercase, lowercase, digit and special characters.
This may be what's throwing an error when you try to connect to the database.
To remedy this:
Log in to MySQL:
sudo mysql --user=root
Delete the root user:
DROP USER 'root'@'localhost';
Create a new user:
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
Give the user all permissions:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
For me it was fixing the right port (changed the default while installing because it was already used).
try the same with mysql command line client:
mysql -h ##.##.#.## -P #### -u ### -p ########
You need to grant priviliges to your root user from MySQL, as your exception message said. Firstly, you login to your MySQL from the command line or from your favorite MySQL client (such as MySQL workbench.) Then you grant permission to your user (root, in this case). This link describes how to login to MySQL from the console, for example,
mysql -h localhost -u root -p
then you need to grant priviliges to user root, for example,
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
which gives full permissions for all databases from any host (%
) to root using a password. You need to be careful if this server is accessible from internet while granting permissions.
I would like to add one more possibilities for the cause: version mismatch between your MySQL and mysql-connector-python
. This problem happened to me when I was using MySQL 5.6.24-72.2-log
and mysql-connector-python==8.0.13
. Downgrading to mysql-connector-python==8.0.5
resolved the issue. Though I was using Python 2, hopefully this would provide more clues for debugging.