Como reiniciar o MySQL com --skip-grant-tables se você não puder usar a senha root?

4

Eu preciso reiniciar o MySQL no Ubuntu 16.04 com a opção --skip-grant-tables habilitada, mas também não sei minha senha de root ou não está funcionando. Como posso definir --skip-grant-tables sem a senha?

Quando eu tento como um usuário comum:

mysqld --skip-grant-tables

Eu vejo isto:

mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

Então, eu tirei este exemplo do /etc/init.d/mysql e adicionei o parâmetro --skip-grant-tables :

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password: 
su: Authentication failure

Portanto, o su não funciona e a senha do root também não funcionou. Eu também tentei isso:

sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/

Como posso iniciar o mysql com --skip-grant-tables?

    
por jcalfee314 22.09.2016 / 21:35

2 respostas

8

Quando você não souber sua senha de root (ou um erro como 'ERROR 1045 (28000): Access denied for user 'root'@'localhost' impede o acesso) você pode obter acesso adicionando a opção ao arquivo de configuração do MySQL. Primeiro abra-o para edição:

sudo nano /etc/mysql/my.cnf

Em seguida, pesquise por [mysqld] e insira esses valores abaixo:

[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################

Como você pode ver, o truque para adicionar parâmetros de linha de comando aqui está descartando o -- da frente do parâmetro. Agora reinicie o serviço mysql e você pode acessar suas tabelas para redefinir o seu senha do usuário root ou quase tudo que você precisa fazer. (No entanto, você não pode fazer nada com as tabelas de permissões porque elas não estão carregadas.)

Cuidado. Enquanto você está neste modo, qualquer usuário logado tem acesso a todo o seu banco de dados. É por isso que adicionei a opção skip-networking acima, para que os usuários remotos não possam acessar as tabelas enquanto você está se recuperando.

Lembre-se de comentar essas linhas e reinicie o mysql mais uma vez quando terminar, para proteger novamente o servidor.

    
por 03.02.2017 / 23:44
0

De comentários.

Para configurações init.rc:

O método mais fácil seria modificar temporariamente o /etc/init.d/mysql para incluir a opção --skip-grant-tables e depois iniciá-lo com este script (/etc/init.d/mysql start).

Em sistemas iniciantes como o Ubuntu 16.04, isso precisa ser feito   /lib/systemd/system/mysql.service .

    
por 17.12.2016 / 16:12

Tags