Uma solução fácil é sudo killall mysqld
enquanto a operação do apt-get está em execução.
A operação do apt apenas continuou rodando sem nenhum erro depois disso (!)
Fonte: link
No meu servidor ubuntu 16.04 estou tentando instalar o mysql pelo seguinte comando
sudo apt-get install mysql-server
Cada vez que ficou preso com a mensagem:
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Renaming removed key_buffer and myisam-recover options (if present)
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.16, use --force if you still need to run mysql_upgrade
Eu tenho que pressionar Ctrl + z para pará-lo. Eu verifiquei o arquivo de log em /var/log/mysql/error.log
e as últimas 10 linhas mostram este resultado:
2017-01-18T09:07:30.329930Z 0 [Note] InnoDB: Buffer pool(s) load completed at 170118 9:07:30
2017-01-18T09:07:30.335086Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2017-01-18T09:07:30.335137Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
2017-01-18T09:07:30.335157Z 0 [Note] - '127.0.0.1' resolves to '127.0.0.1';
2017-01-18T09:07:30.335216Z 0 [Note] Server socket created on IP: '127.0.0.1'.
2017-01-18T09:07:30.349491Z 0 [Note] Event Scheduler: Loaded 1 event
2017-01-18T09:07:30.349749Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' started.
2017-01-18T09:07:30.350543Z 1 [ERROR] 1396 Operation ALTER USER failed for 'root'@'localhost'
2017-01-18T09:07:30.350737Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' ended.
2017-01-18T09:07:30.350864Z 0 [Note] mysqld: ready for connections.
Após a reinicialização eu loguei no mysql por mysql -u root
. dentro do mysql não consigo fazer nenhuma operação, criando novo usuário ou modificando privilégios nada. Eu sou apenas capaz de navegar através de bancos de dados padrão
quando digito show grants
, mostra-me o seguinte resultado
+--------------------------------------+
| Grants for @localhost |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+
O que é bem estranho. Para ter certeza disso, verifiquei a tabela user_privileges
em information_schema
, o que me dá isso:
+----------------+---------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+----------------+---------------+----------------+--------------+
| ''@'localhost' | def | USAGE | NO |
+----------------+---------------+----------------+--------------+
Como posso ativar o acesso root para criar, atualizar?
Uma solução fácil é sudo killall mysqld
enquanto a operação do apt-get está em execução.
A operação do apt apenas continuou rodando sem nenhum erro depois disso (!)
Fonte: link
Finalmente consegui a solução. Aqui está o que eu fiz
sudo apt purge mysql*
/etc/mysql
pasta /var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering
pastas. sudo apt-get install mysql-server
Desta vez, o mysql foi instalado com sucesso sem ficar preso. Enquanto a instalação me pedia senha de root e eu forneci um. Após a instalação, efetuei login com root com a senha fornecida. Desta vez, criando novo usuário, atualizando todos os trabalhos bem. Agora, aqui está o resultado de show grants
:
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
Embora eu ainda não saiba porque na primeira vez não funcionou. Eu tentei removendo apenas o arquivo cnf, mas isso não funcionou. Quando eu removi todas as pastas mysql dentro de /var/lib
, então funcionou. Então eu acho que havia algum arquivo dentro do diretório /var/lib/msyql
que impedia criar qualquer novo usuário (mesmo usuário root).
É por causa de nenhum usuário root ser criado no MySQL. Mas eu não sei porque.
Tente inserir o usuário 'root' na tabela mysql.user
.
Primeiramente, pare o servidor mysql.
sudo /etc/init.d/mysql stop
Para iniciar o MySQL com a opção --skip-grant-tables
, vamos tentar configurar o my.cnf
.
sudo vi /etc/mysql/my.cnf
Adicione a linha a seguir em [mysqld]
.
skip-grant-tables
Inicie o servidor MySQL novamente.
sudo /etc/init.d/mysql start
Faça o login no MySQL
mysql -u root
Insira o usuário 'root' com sua senha desejada.
mysql> INSERT INTO mysql.user VALUES ('localhost','root',password('newpassword'),'Y','Y ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','' ,'','','',0,0,0,0);
mysql> INSERT INTO mysql.user VALUES ('127.0.0.1','root',password('newpassword'),'Y','Y ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','' ,'','','',0,0,0,0);
newpassword
deve ser alterado para a senha desejada.
mysql > sair
Remova skip-grant-tables
em my.cnf
config para usar a autenticação.
Depois disso, reinicie o servidor MySQL normalmente.
sudo /etc/init.d/mysql restart
Tente fazer o login com root
e sua senha.