Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

15
respostas

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)?