instalação do mysql preso no Ubuntu 16.04 (sem privilégios de usuário root)

5

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

  • information_schema
  • teste

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?

    
por user3177667 18.01.2017 / 10:12

3 respostas

12

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

    
por Benjamin Chodoroff 24.07.2017 / 17:16
5

Finalmente consegui a solução. Aqui está o que eu fiz

  • Desinstalar o mysql usando sudo apt purge mysql*
  • Remover /etc/mysql pasta
  • Remover /var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering pastas.
  • Reinicializar
  • Instale o mysql usando 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 user3177667 18.01.2017 / 13:27
-1

É 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.

    
por San Lin Naing 18.01.2017 / 11:09