Como resolver o erro 1698 de acesso negado no MySQL e MariaDB

Se você obteve a mensagem ERROR 1698 ACCESS DENIED FOR USER ao tentar acessar o seu banco de dados MySQL ou MariaDB, este passo a passo pode ajudar a resolver o problema.
Abra um terminal e autentique-se no sistema como superusuário.
Agora, siga o procedimento:

  1. Autentique-se como administrador no servidor de banco de dados:
    
    mysql -u root
    

    e acesse o ‘mysql’:

    
    use mysql
    
  2. Faça a seguinte edição:
    
    update user set plugin='' where User='root';
    
  3. Por fim, “refresque” o cache e saia do servidor:
    
    flush privileges;
    exit
    

Estes 3 passos devem resolver o problema.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'
ERROR 1698 (28000): Access denied for user ‘root’@’localhost’

Referências

https://superuser.com/questions/957708/mysql-mariadb-error-1698-28000-access-denied-for-user-rootlocalhost.
https://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html#error_er_access_denied_no_password_error.

Uma medida simples de segurança que você precisa tomar após instalar o MariaDB

O procedimento, descrito abaixo, é recomendado logo após instalar o servidor MySQL ou MariaDB.
Este texto é uma continuação do artigo instalação do servidor LAMP no Debian 9, onde explico os passos que o antecedem.
Antes de disponibilizar um servidor de banco de dados MySQL ou MariaDB em ambiente de produção, alguns ajustes de segurança se fazem necessários.
Podem ser feitos com a execução do mysql_secure_installation, já presente no seu sistema — ele foi instalado junto com o banco de dados.

O contexto em que este post foi escrito é uma instalação Debian 9.
Nesta versão, a distro iniciou uma transição do MySQL para o MariaDB, a exemplo de outras grandes distribuições.

Resumidamente, trata-se de um assistente para implementar as seguintes medidas de segurança:

  1. configurar a senha root (administrativa) do banco de dados
  2. remover o acesso root de fora do servidor local
  3. remover contas de usuários anônimos
  4. remover o banco de dados test, que oferece acesso padrão a todos os usuários, inclusive anônimos — além de privilégios que permite acessar indiscriminadamente bancos de dados que comecem com a string “_test”.

As medidas são necessárias e recomendadas em um servidor de banco de dados em produção.
Se você instalou o banco de dados para o seu aprendizado, para realizar testes ou para desenvolver aplicativos, provavelmente não vai precisar se preocupar com isto.

O utilitário deve ser executado sem argumentos, assim:


mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 

Para poder se autenticar no MariaDB, para torná-lo mais seguro, será necessário fornecer a senha de usuário root.
Neste caso, o usuário root, a que nos referimos, é o do banco de dados e não o do Linux.
Se você acabou de instalar o MariaDB e ainda não configurou esta senha, ela ainda estará em branco.
Neste caso, pressione Enter, ao fim do texto.
O sistema irá pedir uma nova senha e a confirmação.

Em seguida irá perguntar se deve remover os usuários anônimos do seu sistema.
É seguro responder que sim (ou Yes).

O próximo passo irá perguntar se você quer desabilitar o acesso remoto do root.
Se fizer isto, o superusuário só poderá logar localmente, via localhost.
A opção segura é confirmar o ajuste (Yes).

A próxima opção pede para remover o banco de dados ‘test’, que é útil para quem deseja usar o servidor apenas para aprender ou testar código.
Em máquinas de produção, o seguro é remover este item (Yes).

Por fim, recarregue a tabela de privilégios, para que as alterações tenham efeito imediato no servidor (Yes).

… e pronto!
Como você pôde ver, foi fácil. Você pode responder Yes para todas as perguntas, exceto para redefinir a senha.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Como instalar um servidor web LAMP no Debian 9

Um servidor web é um ponto de início básico para poder instalar e usar uma série de outros softwares e serviços, como galeria de fotos, blog, fórum ou apenas um simples site HTML.
O LAMP é, basicamente, um web server Linux, que inclui o Apache, um banco de dados e suporte à linguagem de programação PHP.

O assunto já rendeu várias tags LAMP e posts diversos, neste mesmo site.
No decorrer do texto, sugiro clicar nos links, sempre que tiver alguma dúvida e queira se aprofundar um pouco mais em um ponto específico.
O conceito é bastante flexível, como podemos ver a seguir

O que é um servidor web LAMP

Como conceito, o LAMP inclui estas 4 “peças”:

  • Você pode usar uma das diversas opções Linux disponíveis. Neste texto, estamos nos baseando no Debian 9 Stretch — que é uma versão LTS do sistema operacional, ou seja, vai ter suporte prolongado até 2022, após quase 2 anos de desenvolvimento — uma ótima opção, portanto, a ser usada em um servidor. A gama de sistemas operacionais, contudo, inclui o FreeBSD e até mesmo o Windows. Neste último caso, o servidor leva o nome de WIMP (Windows, IIS, MySQL e PHP) e, como você pode ver no link para o Urban Dictionary, o termo costuma ter sentido pejorativo.
    Como alternativas, já escrevi sobre como instalar o LAMP no Ubuntu e no OpenSUSE.
  • O servidor web, de que falamos aqui, é o Apache. Alternativas comuns são o Nginx e o Lighttpd.
  • O banco de dados MySQL foi a escolha perfeita deste quarteto, por muito tempo. Hoje, há um processo de migração para o MariaDB em curso — e o Debian está seguindo esta tendência.
  • Por último, temos a escolha da linguagem de programação, até onde se estende a flexibilidade do conceito.
    As escolhas mais comuns são, pela ordem, PHP, Python e Perl — que coincidentemente começam com a letra ‘P’.
    Entretanto, se quiser rodar apps web importantes, como o WordPress, e-commerce ou Piwigo, você vai precisar do PHP.
    Servidores Linux, contudo, já costumam incluir suporte ao Perl e ao Python.
    Se você tem interesse no uso de alguma destas duas opções, verifique se estão presentes no servidor com os seguintes comandos:

    
    perl --version
    
    This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linux-gnu-thread-multi
    (with 67 registered patches, see perl -V for more detail)
    
    Copyright 1987-2017, Larry Wall
    
    ...
    
    
    python --version
    
    Python 3.5.3
    

    Tenha em conta que o Python pode ter 2 versões independentes instaladas, em muitas distribuições GNU/Linux.

Como instalar o servidor web no Debian

O Debian tem uma ferramenta que automatiza a instalação de meta pacotes para o seu sistema.
Sugiro ler sobre o tasksel, mais tarde, para ver o que mais o utilitário pode fazer por você.
Para ter o Apache instalado e rodando, em poucos minutos, rode o seguinte comando:


sudo tasksel install web-server

debian tasksel web-server
Debian tasksel web-server install
Para verificar se o seu web server está funcionando direito, execute o seguinte:


sudo service apache2 status

[sudo] senha para justincase: 
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; 
   Active: active (running) since Sun 2017-07-16 12:26:00 -03; 15
 Main PID: 6524 (apache2)
    Tasks: 55 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─6524 /usr/sbin/apache2 -k start
           ├─6526 /usr/sbin/apache2 -k start
           └─6527 /usr/sbin/apache2 -k start

jul 16 12:26:00 ultra-5 systemd[1]: Starting The Apache HTTP Serv
jul 16 12:26:00 ultra-5 apachectl[6513]: AH00558: apache2: Could 
jul 16 12:26:00 ultra-5 systemd[1]: Started The Apache HTTP Serve
lines 1-13/13 (END)

Procure por “active (running)“.
Debian test web-server Apache
Você também pode testar o Apache invocando o daemon diretamente (ops!), da seguinte forma:


sudo apachectl -v

Server version: Apache/2.4.25 (Debian)
Server built:   2017-06-20T19:29:11

Outro método de verificar se tudo está OK, é acessar o servidor via web: abra o endereço http://localhost em seu navegador.

Até agora, já temos o Apache rodando no sistema.
Falta o banco de dados e o PHP…

Como instalar o MariaDB no Debian

O banco de dados pode ser instalado via apt:


sudo apt install mariadb-server mariadb-client 

Ainda existe a necessidade de instalar uma pequena biblioteca para ajudar na integração entre o PHP e o banco de dados, que iremos ver no próximo tópico.
Por enquanto, faremos uma rápida checagem:


mariadb --version

mariadb  Ver 15.1 Distrib 10.1.23-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

ou pode usar o service, como fez, anteriormente, com o Apache:


sudo service mariadb status

● mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-07-16 15:17:52 -03; 15min ago
 Main PID: 9974 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─9974 /usr/sbin/mysqld

jul 16 15:17:50 ultra-5 systemd[1]: Starting MariaDB database server...
jul 16 15:17:51 ultra-5 mysqld[9974]: 2017-07-16 15:17:51 139788240409152 [Note] /usr/sbin/mysqld (mysqld 10.1.23-MariaDB-9+deb9u1) starting as proces
jul 16 15:17:52 ultra-5 systemd[1]: Started MariaDB database server.

Se o serviço não estiver active, ative-o assim:


systemctl start {apache2,mariadb}

Como instalar o PHP no Debian

Alguns tutoriais recomendam a instalação do PHP primeiro. Isto pouparia o tempo de reiniciar o Apache. Fora isso, o resultado é o mesmo.
O Debian 9 já usa, não somente, o MariaDB como padrão, como o PHP 7.0 em seus repositórios.
Tradicionalmente, a instalação é feita assim:


sudo apt install php php-mysqli apache2-mod-php7.0

Instale o phpmyadmin

Por fim, o phpmyadmin cumpre duas funções neste processo, como um todo.
É raro realizar operações diretamente no banco de dados, se você pretende usar aplicativos como o WordPress — uma vez que há plugins para isso.
Mas nem todo mundo gosta de confiar tarefas de manutenção do banco de dados a ferramentas de terceiros.
Além disto, os plugins acrescentam “peso” ao seu site e o “manual das boas práticas” manda não abusar do recurso.

O phpmyadmin, permite realizar tarefas administrativas nos bancos de dados MySQL/MariaDB.
A ferramenta representa um meio-termo entre a simplicidade dos plugins e a complexidade da linha de comando (CLI).

A segunda função do aplicativo é ajudar a verificar se toda a instalação, feita até aqui, ocorreu bem.


sudo apt install phpmyadmin


Isto feito, não se esqueça de reiniciar o serviço do Apache:


sudo systemctl restart apache2

O fato é que se ficou faltando alguma coisa, nos passos anteriores, a instalação do phpmyadmin irá cuidar de garantir que todas as dependências estejam instaladas e configuradas.
phpmyadmin frontscreen
Basta abrir a página http://localhost/phpmyadmin, para ver se tudo está bem ou não.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Tipos de dados do MySQL e MariaDB

Tipos de dados são uma forma de classificar as informações que serão armazenados no banco de dados.
Entender os tipos de dados que podem ser armazenados no banco e a que situações se adequam é importante para projetar um banco de dados o mais eficiente possível. Veja, a seguir, alguns dos tipos de dados mais comuns no MySQL, acompanhado de uma breve descrição.

Antes de definir exatamente o tipo de dado que você deseja definir, vale a pena prestar atenção nas seguintes diretrizes, para ajudar a ter melhores resultados:

  • os tipos de valores que podem ser usados;
  • que tamanhos podem ter
  • as operações que podem ser realizadas;
  • seus significados;
  • se podem/serão indexados
  • como devem ser armazenados etc.

Tipos de dados numéricos no MySQL

O MySQL tem todos os tipos numéricos possíveis, o que inclui exatos, aproximados, inteiros, de ponto fixo, ponto flutuante etc. A lista, abaixo, mostra um resumo dos tipos de dados possíveis no MySQL:

  • TINYINT — número inteiro muito pequeno (tiny);
  • SMALLINT — número inteiro pequeno;
  • MEDIUMINT — número inteiro de tamanho médio;
  • INT — número inteiro de tamanho comum;
  • BIGINT — número inteiro de tamanho grande;
  • DECIMAL — número decimal, de ponto fixo;
  • FLOAT — número de ponto flutuante de precisão simples (32 bits);
  • DOUBLE — número de ponto flutuante de precisão dupla (64 bits);
  • BIT — um campo de um bit.

Tipos de dados em strings

Strings são cadeias de caracteres. No MySQL, uma string pode ter qualquer conteúdo, desde texto simples a dados binários – tais como imagens e arquivos. Cadeias de caracteres podem ser comparadas e ser objeto de buscas.

  • CHAR — uma cadeia de caracteres (string), de tamanho fixo e não-binária;
  • VARCHAR — uma string de tamanho variável e não-binária;
  • BINARY — uma string binária de tamanho fixo;
  • VARBINARY — uma string binária de tamanho variável;
  • BLOB — um BLOB (Binary Large OBject – OBjeto Grande Binário) pequeno;
  • TINYBLOB — um BLOB muito pequeno;
  • MEDIUMBLOB — um BLOB de tamanho médio;
  • LONGBLOB — um BLOB grande;
  • TINYTEXT — uma string não-binária e de tamanho bem reduzido;
  • TEXT — uma string não-binária e pequena;
  • MEDIUMTEXT — uma string de tamanho comum e não-binária;
  • LONGTEXT — uma string não-binária de tamanho grande;
  • ENUM — de acordo com o manual do MySQL, é uma string, com um valor que precisa ser selecionado de uma lista predefinida na criação da tabela;
  • SET — é um objeto que pode ter zero ou mais valores – cada um dos quais precisa ser escolhido de uma lista de valores predeterminados quando da criação da tabela.

Armazenamento de data e hora

Há várias opções para armazenar dados relacionados a data e hora. Se você quiser apenas armazenar o ano referente a um evento, pode usar o tipo YEAR. O tipo TIMESTAMP pode ser usado para acompanhar as mudanças ocorridas em um campo de uma tabela. Veja os tipos e suas descrições:

  • DATE — o valor referente a uma data no formato 'CCYY-MM-DD'. Por exemplo 1985-11-25 (ano-mês-dia). O 'CC' se refere aos dois dígitos do século (Century, em inglês);
  • TIME — um valor horário no formato 'hh:mm:ss' (hora:minutos:segundos);
  • TIMESTAMP — timestamp é uma sequência de caracteres ou informação codificada que identifica uma marca temporal ou um dado momento em que um evento ocorreu. No MySQL, ele tem o formato 'CCYY-MM-DD hh:mm:ss' – neste caso, seguem a padronização ISO 8601;
  • YEAR — armazena um ano no formato 'CCYY' ou 'YY';

Dados espaciais

O MySQL tem suporte a tipos de dados que correspondem às classes OpenGIS. Alguns destes carregam valores geométricos simples:

  • GEOMETRY
  • POINT
  • LINESTRING
  • POLYGON

O GEOMETRY pode armazenar qualquer tipo de valor geométrico. Os outros valores simples (POINT, LINESTRING e POLYGON) têm seus valores restritos aos tipos geométricos a que se referem.
Os outros, que seguem listados, carregam valores relativos a coleções/coletivos:

  • GEOMETRYCOLLECTION
  • MULTILINESTRING
  • MULTIPOINT
  • MULTIPOLYGON

Assim, GEOMETRYCOLLECTION pode armazenar coletâneas de objetos de qualquer tipo. Os outros tipos coletivos (MULTILINESTRING, MULTIPOLYGON e GEOMETRYCOLLECTION) restringem-se a cada forma geométrica particular.