2013-09-20 4 views
1

Я пытаюсь настроить соединение с моим локальным db (mysql) через PyCharm. Я работаю над macbook pro.PyCharm - Подключение к базе данных. Доступ запрещен для пользователя «root» @ «localhost» (с использованием пароля: ДА)

Я использую это video.

Но, когда я пытаюсь проверить соединения, я получаю эту ошибку:

Connection to Data Source failed 
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:927) 
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1709) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1252) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2486) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2519) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2304) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) 
    in RemoteDriverImpl.connect(RemoteDriverImpl.java:27) 
    at com.sun.proxy.$Proxy87.connect(Unknown Source) 
    in LocalDataSource.getConnection(LocalDataSource.java:158) 

Но у меня нет никаких проблем подключения к MySQL через терминал

mysql -u root --password=123 

UPD

mysql -u root -p -h 127.0.0.1 -D lp 
Access denied for user 'root'@'localhost' (using password: YES) 

mysql -u root -p -h 127.0.0.1 lp 
Access denied for user 'root'@'localhost' (using password: YES) 

mysql -u root -p -h localhost lp 
connected 

UPD

mysql> select host, user, password != '' from mysql.user; 
+-----------+------+----------------+ 
| host  | user | password != '' | 
+-----------+------+----------------+ 
| localhost | root |    1 | 
| 127.0.0.1 | root |    1 | 
| ::1  | root |    1 | 
+-----------+------+----------------+ 
3 rows in set (0.00 sec) 

mysql> select user(), current_user(); 
+----------------+----------------+ 
| user()   | current_user() | 
+----------------+----------------+ 
| [email protected] | [email protected] | 
+----------------+----------------+ 
1 row in set (0.00 sec) 

Вот скриншот моих настроек:

enter image description here

Любые идеи?

+1

Ваша конфигурация MySQL может запрещать TCP-соединения (только через сокеты .. или что-то там, где они есть в мире Linux) – LazyOne

+1

Пожалуйста, проверьте из командной строки, если вы можете подключиться с помощью 'mysql -u root -password = 123 lp' – rsanchez

+0

@LazyOne, если это так, я понимаю, он должен получить ошибку «Невозможно подключиться», а не «Доступ запрещен». – rsanchez

ответ

3

Некоторые или оба они должны исправить вашу проблему:

Проверьте результаты select host, user, password, Select_priv from mysql.user;.

Если password поле не одинакова для всех строк затем сделать:

SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('123'); 
SET PASSWORD FOR 'root'@'::1' = PASSWORD('123'); 

Если Select_priv не 'Y' для всех строк, то сделать:

GRANT ALL ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; 
GRANT ALL ON *.* TO 'root'@'::1' WITH GRANT OPTION; 

EDIT

Поскольку ни одно из них не было истинным, осталась единственная возможность: было несколько экземпляров MySQL, работающих на и один получал соединения, сделанные через сокет, а другой получал соединения, созданные через TCP.

+0

Так странно ... пароль одинаковый в каждом поле, а Select_priv - «Y». Но я все равно это сделал. Тем не менее в том же положении = (.btw, mysql -u root -p -h 127.0.0.1 lp - отрицается, но mysql -u root -p -h localhost lp - ОК. –

+0

@DenisKabalkin единственное, что я могу думать тогда заключается в том, что у вас есть два экземпляра MySQL, и они получают доступ к одному при использовании сокетов, а другой при использовании TCP – rsanchez

+0

oh my. Я нашел очень старый mysqld-зомби-процесс, связанный с 127.0.0.1, убил его, и все работает нормально. Спасибо за помощь. –

3

Возможно, у вас нет разрешения на схему? попробовать это:

mysql -u root -p -h 127.0.0.1 -D lp 

Update У вас есть доступ к базе данных, но вы не имеете доступа к схеме.

GRANT ALL ON `lp`.* TO 'root'@'localhost'; 
+0

Я хотел добавить его в качестве комментария, но у меня не было репутации :( –

+0

Обновлен мой вопрос Да, я не могу подключиться, как это. Что мне делать дальше? –

+0

У вас есть доступ к db, но у вас нет доступа к схеме. вам нужно использовать грант. проверьте это [ссылка] (http://serverfault.com/questions/335740/oracle-grant-all-privileges-to-schema) –

Смежные вопросы