Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Erro ao rodar prepara_banco.py

Quando rodo o prepara_banco.py, o seguinte erro aparece:

Traceback (most recent call last):
  File "C:/Users/avida/OneDrive/Área de Trabalho/A Conquista/Python/prepara_banco.py", line 3, in <module>
    conn = MySQLdb.connect(user='root', passwd='admin', host='127.0.0.1', port=3306)
  File "C:\Users\avida\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\__init__.py", line 84, in Connect
    return Connection(*args, **kwargs)
  File "C:\Users\avida\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\connections.py", line 166, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2059, <NULL>

Já tentei mudar a senha, até mesmo o host do 'conn', mas não funcionou mesmo assim (Coloquei a senha e o host do meu banco do MySQL). O que fazer e como fazer?

15 respostas

Oi Armando, tudo bom?

Qual versão do Mysql você está utilizando? A partir da versão 5.7 (se não me engano) não é permitido o acesso ao banco por conexões via usuario root. A medida rolou há uns 2 anos e desde então esse tipo de erro tem se tornado mais comum.

Verifica se o usuario root tem permissão para acessar de qualquer lugar

Outra coisa, verifica se você está executando o terminal que roda o flask como adminstrador, problemas de permissão são mais comuns em terminais sem permissão de adm =)

Estou usando a versão 8.0. O link que você passou tem um tutorial para Linux, existe algum para Windows? Tive problemas em dois sites com o tutorial que achei (https://marcosvreis.wordpress.com/2012/01/30/habilitando-conexo-remota-no-mysql-server/ neste site não consegui achar o my.ini para mudar o bind-address, também estava usando uma versão diferente do MySQL) (http://linguagemprisma.br4.biz/blog/banco-de-dados/ativando-acesso-remoto-do-mysql-no-windows/ neste não tenho o programa mostrado no começo do tutorial). Como verifico se o terminal do flask tem permissão para adm?

Oi Armando, tudo bom?

Como verifico se o terminal do flask tem permissão para adm? No caso do windows, basta abrir como adminstrador, selecionando com o botão direito no executável,

...neste site não consegui achar o my.ini para mudar o bind-address, também estava usando uma versão diferente do MySQL Normalmente, o my.ini fica na pasta do mysql. Que normalmente fica num diretório parecido com:

C:\Program Files\MySQL\MySQL Server

...neste não tenho o programa mostrado no começo do tutorial...

O Xampp só serve para subir um servidor do Mysql, você já tem ele instalado =)

Tenta acessar o mysql pelo seu terminal com o comando:

mysql -uroot -p

Uma outra opção é você desinstalar o mysql 8 e voltar pro 5.7 que tem menos problemas nesse sentido =)

Abraço

Tentei baixar uma versão mais antiga do MySQL (5.6) mas não adiantou nada, a Workbench continua sendo 8.0.

Oi Armando,

estranho pois o workbench só consome a versão do Mysql instalada no sistema operacional. Você removeu o mysql antigo ao instalar a versão antiga? Tenta dar uma limpada no seu ambiente =)

As vezes as variáveis no seu ambiente ainda estão apontando pra versão 8

Fui tentar desinstalar o MySQL para baixar de novo a versão 5.6, mas não estou conseguindo. Quando tento desinstalar o Server no Painel de Controle, ele simplesmente não desinstala, sem nenhum aviso de erro ou algo do gênero, o resto consegui desinstalar tranquilamente. Isso é algum bug do computador? Tem como instalar separadamente as outras funções do MySQL, sem o Server, para continuar com o que já tem instalado?

Oi Armando, pra remover o mysql da sua máquina tenta seguir os passos:

1 - Rode o prompt de comando como adminstrador e executa pare o mysql com os comandos:

Net stop MySQL
Sc delete MySQL

Tendo tudo parado (aqui vale dar uma garantida abrindo o gerenciador de processos ctrl + shift + esc) tenta remover o mysql pelo painel de programas, dessa vez não deveria dar problema.

Além disso, remova os diretórios: C:\Program Files\MySQL C:\Program Files (x86)\MySQL C:\ProgramData\MySQL C:\Users\SeuUsuario\AppData\Roaming\MySQL

Reinicia sua máquina e o mysql deve ter sido removido.

Continua não funcionando, não existe nenhum arquivo de MySQL no meu computador, só o MySQL Server 5.6 no Painel de Controle, que eu não consigo desinstalar (não aparece nenhum tipo de erro ou mensagem, ele apenas não é desinstalado). Fui tentar criar outro Server (até mesmo com outra versão do MySQL, a 5.7) mas independente da versão que eu baixo no site (https://dev.mysql.com/downloads/installer/), quando vou criar um novo server, só aparece a versão 8.0 do Workbench para instalar como opção.

Bem, nesse caso acredito que não temos muita opção mesmo.

Vamos de mysql 8 e bora configurar as permissões até funcionar.

Instala o mysql 8 e acessa pelo terminal com o comando:

mysql -uroot -p

Digita sua senha e roda o comando:

 use mysql;
 select User,Host from user\G;

Compartilha aqui com a gente o resultado da query. Aqui estamos buscando todos os Hosts permitidos para todos os usuários. Se sua aplicação não está conseguindo acessar o banco muito provavelmente é um problema de permissão. Com o resultado da query podemos ter certeza =)

Nesse cenário, vale a pena criar um usuario seu:

CREATE USER 'nomeDoSeuUsuario'@'localhost' IDENTIFIED BY 'suaSenha';

GRANT ALL PRIVILEGES ON * . * TO 'nomeDoSeuUsuario'@'localhost';

FLUSH PRIVILEGES;

Assim, esse usuário terá permissão pra acessar de qualquer lugar.

Na sua aplicação troca o usuario e senha nas configurações de conexão com o banco e tenta de novo. Se rolar algum erro compartilha aqui com a gente também =)

Compartilha aqui com a gente o resultado da query

*************************** 1. row ***************************
User: mysql.infoschema
Host: localhost
*************************** 2. row ***************************
User: mysql.session
Host: localhost
*************************** 3. row ***************************
User: mysql.sys
Host: localhost
*************************** 4. row ***************************
User: root
Host: localhost
4 rows in set (0.00 sec)

ERROR:
No query specified

Eu continuo com o mesmo erro:

Traceback (most recent call last):
  File "C:/Users/avida/OneDrive/Área de Trabalho/A Conquista/Python/prepara_banco.py", line 3, in <module>
    conn = MySQLdb.connect(user='Coloquei meu usuário', passwd='Coloquei minha senha', host='localhost', port=3306)
  File "C:\Users\avida\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\__init__.py", line 84, in Connect
    return Connection(*args, **kwargs)
  File "C:\Users\avida\PycharmProjects\jogoteca\venv\lib\site-packages\MySQLdb\connections.py", line 166, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2059, <NULL>)

Tenho que mudar o port ou o host também?

Estou na mesma situação do Armando. Mesmo atribuindo privilégios ao novo usuário, continua sendo exibido o erro:

MySQLdb._exceptions.OperationalError: (2059, <NULL>)

Sim, já tentei diversas maneiras e mesmo assim não funciona!

Armando, sobre o resultado da query:

*************************** 1. row ***************************
User: mysql.infoschema
Host: localhost
*************************** 2. row ***************************
User: mysql.session
Host: localhost
*************************** 3. row ***************************
User: mysql.sys
Host: localhost
*************************** 4. row ***************************
User: root
Host: localhost

Realmente não parece ser um problema de permissão. Dei uma procurada mais a fundo no erro:

MySQLdb._exceptions.OperationalError: (2059, <NULL>)

E grande parte das respostas apontaram para um conflito entre a versão do mysql e o flask, como eu tinha comentado antes.

As configurações de conexão estão corretas no seu caso e o banco de dados permite conexões locais. Aqui no forum outros alunos passaram pelo mesmo problema em diversos tópicos também e a solução foi o downgrade do mysql pra <= 5.7

Não sei muito bem o porque do seu caso não ser possível excluir a versão antiga mas outra possível solução é subir uma instância do mysql em docker em parelelo. Aqui na alura tem alguns cursos de docker que podem te ajudar nesse sentido =)

Outra abordagem é utilizar sistemas linux para desenvolvimento. Pode parecer besteira mas pro dia-a-dia do desenvolvedor ter um ambiente favorável a configurações por linha de comando pode ser bem útil.

Alberto, tudo bom?

Seu mysql também é a última versão? já tentou o downgrade?

Só o meu Server precisa 5.7 ou todas as aplicações também precisam ser dessa versão (porque não consigo achar o Workbench 5.7 no MySQL Installer)?