powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Не могу с помощью pymysql присоединиться к базе
25 сообщений из 28, страница 1 из 2
Не могу с помощью pymysql присоединиться к базе
    #39696866
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ubuntu 18.04 х64, Python 3.6.5

Установил mysql и с помощью терминала могу открыть сеанс работы с сервером:
Код: sql
1.
sudo mysql -u root -p



Без привилегий sudo сеанс не открывается, а с sudo все хорошо работает (таблицы создаются, записи вносятся, выборки делаются).

Но когда я запускаю python я использую команду без sudo (и значит у python запущен без таких прав), при этом коннект с БД не устанавливается (пароль не скрываю, потому что это эксперименты):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
python3
import pymysql
conn = pymysql.connect(host='localhost', user='root', passwd='1234567890', db='mysql')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 327, in __init__
    self.connect()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 598, in connect
    self._request_authentication()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 852, in _request_authentication
    auth_packet = self._read_packet()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 683, in _read_packet
    packet.check_error()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.InternalError: (1698, "Access denied for user 'root'@'localhost'")



Если запустить оболочку python c привилегиями суперпользователя, то происходит ошибка импорта.
Код: sql
1.
2.
3.
4.
5.
sudo python3
>>> import pymysql
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pymysql'



Что делать?
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39696894
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLБез привилегий sudo сеанс не открывается
Почему не открывается, какая ошибка?
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39696898
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleПочему не открывается, какая ошибка?

Код: sql
1.
ERROR 1698 (28000): Access denied for user 'root'@'localhost'



Спасибо за участие!
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39696912
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если на 127.0.0.1 подключаться?
sudo тут ничего не даст, авторизация по логину и паролю ведь.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39696930
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И из консоли и из скрипта одна и та же ошибка - запрет доступа на уровне СУБД. Есть смысл уточнить привилегии доступа пользователя и пароль.
Почему влияет sudo - не понятно, не должно быть влияния.
И ещё, Вы указываете db='mysql', а это служебная база. Экспериментировать на ней не слишком хорошая идея.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39696989
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hettsudo тут ничего не даст, авторизация по логину и паролю ведь.

Изначально на 127.0.0.1 подключался- тоже не работает.

Hettsudo тут ничего не даст, авторизация по логину и паролю ведь.

Ошибка точно такая же, как если бы я попробовал без sudo к mysql из терминала подключиться, поэтому подозрение в эту сторону. Да получается я бы обошел систему защиты системы (не вводил пароль суперпользователя) с помощью python...
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39696996
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причем тут пароль супервользователя?
Вы его вводите после того как выполнили mysql -u root -p ?
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697008
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HettА причем тут пароль супервользователя?
Вы его вводите после того как выполнили mysql -u root -p ?

В том- то и смысл, что нет!
А если напишу sudo mysql -u root -p, то после команды надо вводить два пароля: для суперпользователя и для mysql
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697009
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleИ ещё, Вы указываете db='mysql', а это служебная база. Экспериментировать на ней не слишком хорошая идея.

Я пробовал и к существующей базе присодиниться (из которой отлично делаются SELECT-выборки в терминале)- та же самая ошибка.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697017
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLvkleИ ещё, Вы указываете db='mysql', а это служебная база. Экспериментировать на ней не слишком хорошая идея.

Я пробовал и к существующей базе присодиниться (из которой отлично делаются SELECT-выборки в терминале)- та же самая ошибка.Не в этом дело, а в том, что в базе mysql хранятся, например, пользователи и их привилегии и ещё много чего нужного и полезного. Для прямого доступа она не предназначена за очень редким исключением. Ничего криминального в подключении к этой базе нет, однако, случайно попортить данные в ходе экспериментов не так уж сложно.


AlekseySQLА если напишу sudo mysql -u root -p, то после команды надо вводить два пароля: для суперпользователя и для mysqlНе рассматривали вариант, что используется не вводимый пароль мускульного рута, а другой? Посмотрите нет ли в домашней директории системного рута специфическийх файлов мускуля, вроде my.cnf (или .mylogin.cnf, но сомневаюсь, что он может быть использован) с сохраненным паролем мускульного рута.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697025
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне сразу в глаза бросилось, но я думаю не мог же ТС так налажать,
ан нет, налажал...

Код: plaintext
1.
2.
3.
4.
5.
connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)


password
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697033
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett, а в консоли как налажать можно?
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697034
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hettмне сразу в глаза бросилось, но я думаю не мог же ТС так налажать,
ан нет, налажал...

Код: plaintext
1.
2.
3.
4.
5.
connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)


password

Та же ошибка:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
>>> conn = pymysql.connect(host='127.0.0.1', user='root', password='1234567890', db='scraping',charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
Traceback (most recent call last):                                                                                                                                                           
  File "<stdin>", line 1, in <module>                                                                                                                                                        
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect                                                                                           
    return Connection(*args, **kwargs)                                                                                                                                                       
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 327, in __init__                                                                                      
    self.connect()                                                                                                                                                                           
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 598, in connect                                                                                       
    self._request_authentication()                                                                                                                                                           
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 852, in _request_authentication                                                                       
    auth_packet = self._read_packet()                                                                                                                                                        
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 683, in _read_packet                                                                                  
    packet.check_error()                                                                                                                                                                     
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/protocol.py", line 220, in check_error                                                                                      
    err.raise_mysql_exception(self._data)                                                                                                                                                    
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception                                                                                 
    raise errorclass(errno, errval)                                                                                                                                                          
pymysql.err.InternalError: (1698, "Access denied for user 'root'@'localhost'") 
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697038
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleПосмотрите нет ли в домашней директории системного рута специфическийх файлов мускуля, вроде my.cnf (или .mylogin.cnf, но сомневаюсь, что он может быть использован) с сохраненным паролем мускульного рута.

Как это сделать? В папки home нет каталога для рута (в том числе среди скрытых). В терминале зашел под root и попал в корневую папку root, где лежат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
drwx------ 1 root root  108 Sep  2 16:10 .
drwxr-xr-x 1 root root  256 Aug 21 08:42 ..
-rw-r--r-- 1 root root 3106 Apr  9 14:10 .bashrc
drwxr-xr-x 1 root root   94 Aug  5 16:59 .cache
drwxr-xr-x 1 root root   36 Jun 18 12:26 .config
drwx------ 1 root root   22 Jun 18 12:25 .dbus
drwxr-xr-x 1 root root   10 Aug  6 11:18 .local
-rw-r--r-- 1 root root  148 Aug 17  2015 .profile
-rw------- 1 root root   15 Sep  2 16:10 .python_history
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697039
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleHett, а в консоли как налажать можно?
не знаю, но подозреваю в консоли в .my.cnf переопределен хост.

если сделать
`sudo cat ~/.my.cnf`

есть ли что там?
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697052
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLВ папки home нет каталога для рутаОн не в хоуме, он /root, прямо в корневой директории обычно.

Но раз уж там нет ничего похожего, тогда... в общем, других идей пока нету. Если только посмотреть эти файлы ещё в пользовательской директории... Тут мало понятного.

С другой стороны, если под мускульным рутом правдами и неправдами зайти удается, так создайте нового рядового пользователя и под ним попробуйте подключиться.
На всякий случай, временно мускуль можно запустить с опцией --skip-grant-tables и задать новые пароли для рута, если есть сомнения в пароле и нормальный вход недоступен.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39697056
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hettесли сделать
`sudo cat ~/.my.cnf`

есть ли что там?

Код: plaintext
No such file or directory

Это что за файл? Где его искать?
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39698496
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал нового пользователя ivan (под таким же юзером я сижу в системе) и дал ему все полномочия:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$ sudo mysql -u root

mysql> USE mysql;
mysql> CREATE USER 'ivan'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ivan'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='ivan';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart



И теперь отлично под ним захожу с помощью консольной утилиты mysql без всяких sudo:
Код: sql
1.
mysql -u ivan



Но python продолжает выдавать ошибку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
python3
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymysql
>>> conn = pymysql.connect(host='127.0.0.1', user='ivan', password='', db='mysql')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 327, in __init__
    self.connect()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 598, in connect
    self._request_authentication()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 852, in _request_authentication
    auth_packet = self._read_packet()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 683, in _read_packet
    packet.check_error()
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/home/ivan/anaconda3/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.InternalError: (1698, "Access denied for user 'ivan'@'localhost'")



Пробовал в пароле указать значение None, заменить название поля на passwd - все равно вылазит та же ошибка.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39698551
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL
Код: php
1.
mysql> CREATE USER 'ivan'@'localhost'



Код: php
1.
host='127.0.0.1', user='ivan'



Код: php
1.
"Access denied for user 'ivan'@'localhost'"



Вообще, странно...

Если создали пользователя *@localhost, то зачем подключаетесь через TCP-сокет? Это разные пользователи в MySQL, не путайте их.

А если подключились через TCP-сокет, то откуда в сообщении об ошибке локалхост взялся? Возможно, что мускуль как-то отрезолвил имя хоста по айпишнику. Впрочем, это проверяемо, можно отключить в MySQL резолвинг имен, за это отвечает --skip-name-resolve.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39698577
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleЕсли создали пользователя *@localhost, то зачем подключаетесь через TCP-сокет? Это разные пользователи в MySQL, не путайте их.


Подключаюсь с помощью библиотеки "pymysql". Какие она там сокеты использует- не знаю. Мне главное чтобы python начал работать с mysql- сервером. Свой вариант я взял из книги Митчелл "Скраппинг веб- сайтов" (стр. 106)
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39698748
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос не в питоне, а в мускуле.

При указании хоста как "localhost" клиентом используется Unix-сокет для подключения к серверу MySQL. По крайней мере, _должен_ использоваться. Притом, это единственный однозначный вариант.

При указании хоста как "127.0.0.1" или любого другого IP-адреса или доменного имени для подключения используется TCP-сокет. В зависимости от текущих настроек сервера MySQL и наличия/доступности/настроек DNS в сети указанный IP-адрес может резолвится или не резолвиться в доменное имя, которое может быть использовано для идентификации пользователя после собаки. В этом есть неоднозначность. Выше я написал, как эту неоднозначность немножко уменьшить. Другой вариант - пользователь 'ivan'@'%' - применимо для подключения пользователя 'ivan' с любого хоста, за исключением localhost.

Соответственно, mysql-пользователи 'ivan'@'localhost' и 'ivan'@'127.0.0.1' есть разные пользователи с точки зрения мускуля.
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39699209
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleВопрос не в питоне, а в мускуле.

При указании хоста как "localhost" клиентом используется Unix-сокет для подключения к серверу MySQL. По крайней мере, _должен_ использоваться. Притом, это единственный однозначный вариант.

При указании хоста как "127.0.0.1" или любого другого IP-адреса или доменного имени для подключения используется TCP-сокет. В зависимости от текущих настроек сервера MySQL и наличия/доступности/настроек DNS в сети указанный IP-адрес может резолвится или не резолвиться в доменное имя, которое может быть использовано для идентификации пользователя после собаки. В этом есть неоднозначность. Выше я написал, как эту неоднозначность немножко уменьшить. Другой вариант - пользователь 'ivan'@'%' - применимо для подключения пользователя 'ivan' с любого хоста, за исключением localhost.

Соответственно, mysql-пользователи 'ivan'@'localhost' и 'ivan'@'127.0.0.1' есть разные пользователи с точки зрения мускуля.

Спасибо!
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39699379
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появился вопрос: Python работает с MariaDB ?

авторЭта база данных основана на исходном коде MySQL и ее разработка началась после перехода оригинала в собственность Oracle. За работу взялись первоначальные разработчики MySQL. MariaDB сохраняет тесную совместимость с MySQL, поддерживаются все ее команды и синтаксис запросов. Кроме того, из дополнительных возможностей можно отметить поддержку таблиц: XtraDB, Aria, PBXT, FederateX, OQGRAPH, SphinxSE и другие.

Кроме таблиц была очень сильно улучшена производительность и добавлены новые возможности. Разработка ведется компанией MariaDB Foundation и разработчиками по всему миру, но в развитие проекта инвестируют деньги множество компаний, среди которых Google и Intel. Это лучшая и самая популярная база данных Linux.
Источник
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39699502
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLPython работает с MariaDB ?А есть сомнения?
...
Рейтинг: 0 / 0
Не могу с помощью pymysql присоединиться к базе
    #39699556
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должен, другие же клиенты работают.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Не могу с помощью pymysql присоединиться к базе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]