Turnkey Linux – Access denied for user ‘root’@’localhost’

Se você estiver utilizando algum Appliance da TurnKey GNU/Linux 15.0 que venha com banco de dados MySQL, saiba que o banco que vem por padrão é o MariaDB e isso é ótimo!

Distributor ID: TurnKey
Description: TurnKey GNU/Linux 9.5 (stretch)
Release: 9.5
Codename: stretch

Algo que tem ocorrido com essa versão do Appliance é que o acesso ao TurnKey Linux Database Administration Console – Powered by Adminer   – (https://IP:12322), é não permitir o login com usuário root e senha definida na instalação, exibindo o erro:

Access denied for user ‘root’@’localhost’

Para resolver isso o procedimento é simples:

# mysql -u root -p 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql;
MariaDB [(none)]> update user set password=PASSWORD('INFORME_A_SENHA') where User='root';
MariaDB [(none)]> update user set plugin='' where User='root';
MariaDB [(none)]> flush privileges; 
MariaDB [(none)]> quit;

# /etc/init.d/mysql restart

Lembrando que esse não é um erro, mas uma modificação na imagem Turnkey Linux na versão 9.5. O acesso ao banco de dados MySQL/MariaDB pode ser feito normalmente pelo usuário adminer e senha definida na instalação, sem necessidade de fazer essa alteração acima no console.

Exibir bancos, exibir tabelas, exibir colunas…

Para quem esta vindo do MySQL para o PostgreSQL não ficar perdido.

mysql: SHOW TABLES
postgresql: \d
postgresql: SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

mysql: SHOW DATABASES
postgresql: \l
postgresql: SELECT datname FROM pg_database;

mysql: SHOW COLUMNS
postgresql: \d table
postgresql: SELECT column_name FROM information_schema.columns WHERE table_name ='table';

mysql: DESCRIBE TABLE
postgresql: \d+ table
postgresql: SELECT column_name FROM information_schema.columns WHERE table_name ='table';

Removendo espaços no início e fim de uma string.

Dica boba 🙂

Acontece muito quando se importa dados de uma planilha alguns dados apresentarem espaços no início ou no fim da string. Para remover é fácil, basta executar esta query:

UPDATE tabela set campo = trim(campo);

Agora caso queira remover somente espaços da direta ou da esquerda é só executar:

Lado esquerdo:
UPDATE tabela SET campo = LTRIM(campo);

Lado direito:
UPDATE tabela SET campo = RTRIM(campo);

Resetando a sequência em um campo Serial no PostgreSQL

1. Se você quiser preservar os dados, das demais tabelas e alterar somente a sequência:

SELECT setval(‘nome_da_sequencia’, 1, false);

Para saber o nome da sequência, pode-se executar este outro comando, antes:

SELECT pg_get_serial_sequence(‘nome_da_tabela’,’nome_do_campo_serial’);

2. Se você quiser apagar toda a tabela e resetar a sequência:

TRUNCATE TABLE nome_da_tabela
RESTART IDENTITY;

Finalizar todas as sessões ativas de um banco PostgreSQL

Para fazer um DROP DATABASE é necessário “matar” as conexões ativas, existe várias maneiras de fazer isso, porém a mais simples é você usar a a função pg_terminate_backend(int).

Você pode obter todas as seções ativas, rodando pg_stat_activity.

A forma mais simples de matar todas as sessões é executando essa query (claro que você não pode estar conectado na mesma base de dados).

select pg_terminate_backend(procpid)
from pg_stat_activity
where datname = ‘nome_do_database’

Fonte: http://stackoverflow.com/

Resolvendo o problema Too many connections do MySQL

O MySQL por default vem configurado para aceitar 100 conexões simultâneas e isso é mais que suficiente para a grande maioria das situações. Porém é comum receber periodicamente o erro “Too many connections”.

Uma solução paliativa é aumentar o número de conexões do MySQL, dessa forma:

Fara MySQL 3.x:
# vi /etc/my.cnf
set-variable = max_connections = 250

Para MySQL 4.x and 5.x:
# vi /etc/my.cnf
max_connections = 250

Reiniciar o MySQL. É possível checar o número de conexões configuradas dessa forma:

echo “show variables like ‘max_connections’;” | mysql

Agora, este problema normalmente ocorre porque o PHP esta persistindo as conexões, ou seja, cada vez que chama-se uma página com conexão com o banco, é adicionado mais um pool de conexão. Para resolver de vez, não é necessário aumentar o número de conexões do MySQL, conforme mostrado acima, pois o problema esta na configuração do PHP, tem que desativar a persistência das conexões, editando o arquivo php.ini, e colocando o allow_persistent em OFF.

[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent = Off

E é tudo, reinicie o Apache com /etc/init.d/httpd restart.