Preciso reiniciar o MySQL no Ubuntu 16.04 com a --skip-grant-tables
opção habilitada, mas não sei minha senha root ou ela não está funcionando. Como posso configurar --skip-grant-tables
sem a senha?
Quando tento como usuário normal:
mysqld --skip-grant-tables
Eu vejo isso:
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)
Então, desenterrei este exemplo de /etc/init.d/mysql e adicionei o --skip-grant-tables
parâmetro:
su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password:
su: Authentication failure
Então su não funciona e a senha 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?
Responder1
Quando você não sabe sua senha 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 [mysqld]
e insira estes 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 é retirar o --
da frente do parâmetro. Agorareinicie o serviço mysqle você pode acessar suas tabelas para redefinir sua senha de usuário root ou quase tudo que precisar fazer. (No entanto, você não pode fazer nada com as tabelas de concessão porque elas não estão carregadas.)
Cuidado.Enquanto você estiver neste modo, qualquer usuário logado terá acesso a todo o seu banco de dados. É por isso que adicionei a skip-networking
opção acima, para que usuários remotos não possam acessar as tabelas durante a recuperação.
Certifique-se de comentar essas linhas e reinicie o mysql mais uma vez quando terminar, para proteger novamente o servidor.
Responder2
Dos comentários.
Para configurações init.rc:
O método mais fácil seria modificar temporariamente /etc/init.d/mysql para incluir a opção --skip-grant-tables
e então iniciá-lo com este script (/etc/init.d/mysql start).
Em sistemas iniciantes como o Ubuntu 16.04, isso precisa ser feito no formato
/lib/systemd/system/mysql.service
.