quarta-feira, 20 de fevereiro de 2013

Alterando a senha do usuário root no MySQL

Linux:

1.Parar o serviço do MySQL (service mysqld stop, /etc/init.d/mysqld stop, matando o processo – conforme sua distribuição);
2.Reiniciar o mysql com a opção –skip-grant-tables (você poderá utilizá-la ao iniciar o mysqld manuamente ou colocando-a no arquivo de init)
3.Alterar a senha do usuário root com o comando:

# mysqladmin -u root password 'nova_senha'
# mysqladmin flush-privileges

4.você pode alterar a senha também com o comando:

# mysql -u root mysql
# mysql> UPDATE user SET Password=PASSWORD('nova_senha') WHERE User='root';
# mysql> FLUSH PRIVILEGES; 

Windows XP (com o MySQL rodando como serviço):

1.Entrar nos serviços do windows (Iniciar -> Executar -> services.msc);
2.Procure pelo MySQL, clique com o botão direito sobre ele e vá em propriedades;
3.Pare o serviço (clicando sobre o botão parar);
4.Insira no campo “Parâmetros de inicialização” o parâmetro –skip-grant-tables e clique no botão iniciar e em seguida botão Ok;
5.Execute o cmd (Iniciar -> Executar -> cmd) , entre no diretório de binários do MySQL (cd c:\arquivos de programas\mysql\bin (ou onde estiver instalado));
6.Alterar a senha do usuário root com o comando:

# mysqladmin -u root password 'nova_senha'
# mysqladmin flush-privileges

7. você pode alterar a senha também com o comando:
# mysql -u root mysql
# mysql> UPDATE user SET Password=PASSWORD('nova_senha') WHERE User='root';
# mysql> FLUSH PRIVILEGES; 

O parâmetro –skip-grant-tables desabilita no servidor o uso do sistema de privilégios. Com isso todos os usuários terão acesso a todos os bancos de dados. Ao executar o comando Flush privileges, o servidor retorna a utilizar seu sistema de privilégios, mantendo a segurança original do serviço.

Agora se você adicionou o parâmetro –skip-grant-tables no arquivo de init, não se esqueca de remové-lo de lá, para evitar que na próxima reinicialização do serviço ele fique vulnerável. Caso seu MySQL esteja no Windows, execute os 4 primeiros passos novamente removendo o parâmetro passado na inicialização.

segunda-feira, 18 de fevereiro de 2013

Habilitar/Desabilitar Archivelog no banco de dados Oracle


Archivelog é gerado pelo banco de dados em todas as operações de transações no banco de dados como: INSERT, DROP, ALTER, ETC. No Oracle versão 9i para frente a Oracle recomenda o uso do Backup com RMAN, isto implica dizer que você precisa do seu banco em modo de Archive.


Para você recuperar seu banco de dados é mais rápido e mais seguro, já que você poderá voltar seu backup em uma determinada faixa de tempo e depois aplicar os Archivelog do dia ou do tempo.
Se o seu banco de dados não está no modo Archive, você poderá realizar os procedimentos abaixo para mudar seu banco para o modo Archive.

[oracle@oraserver ~]$ sqlplus / as sysdba

Verificando onde ficaram os ARCHIVELOG
SQL> show parameter log_archive_dest_1


Habilitando...
SQL> select log_mode from gv$database;
SQL> shutdown immediate;
SQL> startup mount exclusive;
SQL> alter database archivelog;
SQL> alter database open;
SQL> select log_mode from gv$database;

Desabilitando...
SQL> startup mount
SQL> alter database noarchivelog;
SQL> alter database open;

quarta-feira, 6 de fevereiro de 2013

Retorna o número de usuários conectados - PostgreSQL

SELECT COUNT(*FROM pg_stat_activity;

pg_stat_database que apresenta para cada banco de dados o número de conexões.

DUMP E RESTORE - PostgreSQL


Dump


dump de um banco inteiro - formato sql puro
pg_dump -U usuario -h ip_servidor nomedobanco > nomedobanco.sql
dump de um banco inteiro - formato binario
pg_dump -U usuario -h ip_servidor -Fc -f banco.dump nome_do_banco
dump de uma tabela do banco
pg_dump -U usuario -h ip_servidor -Fc -t tabela -f tabela.pgdump nome_do_banco
dump de um table de um schema
pg_dump -U postgres -h 127.0.0.1 -Fc -n schema -t tabela -f tabela.pgdump banco

Restore

para restaurar um banco com dump em formato SQL
psql -U usuario -h ip_do_servidor -f nomeodabanco.sql nomedobanco
para restaurar um banco com dump em formato binário
pg_restore -U usuario -h ip_servidor -d nome_do_banco arquivo.dump
para restaurar somente os dados:
pg_restore -U usuario -h ip_servidor -a -d nome_do_banco arquivo.dump
para restaurar somente um determinado esquema
pg_restore -U usuario -h ip_servidor -n meu_esquema -d nome_do_banco arquivo.dump
para restaurar apenas os dados de uma tabela especifica
pg_restore -U usuario -h ip_servidor -a -t tabela_especifica -d nome_do_banco arquivo.dump

exemplos

fazendo dump de tabela da radioagencia
pg_dump -Fc -U drupal -h 127.0.0.1 -t drupal_webform -f arquivo -d drupal drupal_webform
restaurando tabela da radioagencia
pg_restore -Fc -U drupal -h 127.0.0.1 -t drupal_webform -d drupal drupal_webform
Observe o formato do DUMP, ele precisa ser tipo C ou tipo F para que o pg_restore consiga recuperar, se for plain text vai dar erro.

dicas soltas

alterando senha do usuario

postgres=#alter user fernando with password 'senha';

tamanho de uma base

dados sem arrendodamento, tamanho do bancos apenas
postgres=# SELECT pg_database_size('geekdb');
arredondando, tamanho do banco apenas
postgres=# SELECT pg_size_pretty(pg_database_size('geekdb'));
tamanho real do banco no disco arredondando
postgres=# SELECT pg_size_pretty(pg_database_size('somedatabase')) As fulldbsize;

tamanho de uma tabela

postgres=# SELECT pg_size_pretty(pg_total_relation_size('drupal_cache'));
nde

tamanho de todas as tabelas

postgres=# SELECT
  relname as "Table",
  pg_size_pretty(pg_total_relation_size(relid)) As "Size",
  pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as "External Size"
  FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
  

tamanho de todos as tabelas e objetos maiores que 64k

postgres=# SELECT
  relname AS objectname,
  relkind AS objecttype,
  reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
  FROM pg_class
  WHERE relpages >= 8
  ORDER BY relpages DESC;
  
  

tamanho da maior tabela para menor

SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

psql

usando o console

listando bancos

postgres=# \l

conectando a um banco

postgres=# \c nome_do_banco

outros

work mem

Quando algum processo pesado é executado, por exemplo a geracao de indices do drupal ou consultas que usam muito ORDER BY, um diretorio pgsql_temp será criado caso o uso da memoria setado na variavel WORK_MEM seja execedido.
Nestes caso o aconselhável é aumentar - perante monitoramento - o parametro WORK_MEM na sessão em que está executando a query ou rodando os indices.
SET WORK_MEM TO "64MB"
Esse valor é por consulta, se colocar um valor muito alto a máquina vai sentar bonito, procure um valor entre 64 e 128, monitorando o servidor para verificar o impacto.

sexta-feira, 21 de dezembro de 2012

Permissão para acesso remoto do MySQL

O Mysql por padrão ao ser instalado numa máquina, não está configurado para permitir acesso remoto, somente local, por parte do usuário, então para habilitar seu uso seja de qual for a máquina, faz-se os seguintes procedimentos:

Como root no terminal do linux digite:
nano /etc/mysql/my.cnf

Agora altere a seguinte linha..
bind-address = 127.0.0.1

..para..

bind-address = 0.0.0.0

Agora reinicie o serviço mysql com:
/etc/init.d/mysql restart

Entre no prompt do mysql com:

mysql --user=root --password=suasenha

Então digite o seguinte comando:
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'suasenha';

Esse comando é bem explicativo, ele garante (GRANT) todos (ALL) os privilégios de acesso a todos (*.*) os databases do banco, ao (TO) usuário (‘root’) em todas as máquinas (‘%’) usando a senha do usuário root (IDENTIFIED BY ‘suasenha’). Traduzindo em miúdos, você acessa tudo no banco com o usuário root em qualquer máquina remota.

Obs: Se quiser dar acesso somente a uma maquina específica troque ‘%’ pelo ip da máquina, por exemplo, dar acesso somente a máquina 192.168.0.2, ficaria assim o comando:
GRANT ALL ON *.* TO 'root'@'192.168.0.2' IDENTIFIED BY 'suasenha';

Obs2: Onde estiver escrito suasenha, troque pela senha do usuário root.

Agora pode testar conectar-se ao banco de outra máquina que você terá acesso

MySQL: Erro: "mysqld dead but subsys locked"

Para corrigir o erro relatado no título desta dica, basta seguir os passos: 

Ao iniciar o MySQL

# /etc/init.d/mysqld start 

Não ocorre nenhum erro, porém, quando checamos o status: 

# /etc/init.d/mysqld status 

Nos deparamos com seguinte erro: 
mysqld dead but subsys locked

Para resolvermos este problema, basta executar a linha a seguir: 

# chown -R mysql.mysql /var/run/mysqld 

Com este comando colocamos como dono dos arquivos o usuário "mysql", resolvendo assim nosso problema! 

MySQL - Gerenciamento de memória

Eu tenho trabalhado com o MySQL mas, nas versões para Ubuntu, Centos Debian e versões mais atuais, os nós e nódulos da memória (cache) sempre estão cheios, e o MySQL acaba consumindo muita memória RAM. 

Assim, sempre tive problemas em usar mais de uma base de dados. Em 24 horas, estava tendo que reiniciar o servidor umas 3 vezes, no mínimo, para o MySQL voltar a funcionar. 

Um exemplo que acontecia sempre: de 10 bases de dados, 6 estavam funcionando normalmente, mas 4 simplesmente paravam de gravar os dados. 

A solução: 

# crontab -e 

Adicione: 

# m h   dom mon dow    command
0 * * * * /root/./germem

E crie o script germem

#!/bin/bash
echo 3 > /proc/sys/vm/drop_caches

Obs.: Para o drop_caches, há opções de 1 a 3. Eu escolhi a 3, pois ela limpa os nós e nódulos da memória. 

Feito isso, faz exatamente 7 meses que não reinicio a máquina para o MySQL funcionar.

terça-feira, 18 de dezembro de 2012

Tabelas corrompidas no MySQL

O que fazer quando ocorre o erro "ERROR 145 (HY000): Table 'nome da tabela' is marked as crashed and should be repaired" ? 

Acessar o banco com problemas: 

mysql> use 'nome_do_banco'; 

Testar as tabelas até descobrir qual é a tabela ruim: 

mysql> check table 'nome_da_tabela'; 

Reparar a tabela ruim: 

mysql> repair table 'nome_da_tabela'; 

MySQL: Alterar diretório base de dados

Amigos do VOL, bom dia. Venho com uma dica de como alterar o caminho da base de dados do MySQL. Por exemplo: ter que colocar a base em outro diretório ou partição. 

Diretório padrão: /var/lib/mysql 

# vi /etc/my.cnf 

datadir = [novo_caminho] ex: /mnt/mysql 

Salvar alteração: :wq 

Não se esqueça de dar permissão para o novo diretório do MySQL. 

# chown -R mysql.mysql /mnt/mysql 

Executar o comando para criar nova base de dados: 

# mysql_install_db 

Pronto, agora é só iniciar o MySQL com o comando: 

# mysqld_safe & 

Bom, espero ter ajudado.

Erro 2002 (HY000) ao conectar ao MySQL

Depois de instalar o MySQL, tentei conectar e recebi a seguinte mensagem: 

# mysql -u root -p 

Password: 
Error 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

Para resolver o problema: 

Logue como root: 

# mysql_install_db
# chown -R mysql.mysql /var/lib/mysql
# mysqld_safe &
# mysqladmin -u root password NOVA_SENHA
# mysql -u root -p
 

Password: 
mysql > 

Pronto! Instalado e pronto para uso! 

Comandos úteis do MySQL

Criando uma senha de root para o MySQL

# mysqladmin -u root password '[nova senha]' 

Visualizando todas as bases de dados via linha de comando: 

# mysqlshow -u usuario -p[senha] 

Criando um usuário para acesso a uma determinada base: 

mysql> GRANT ALL ON base.tabela TO usuario@'%' IDENTIFIED BY 'SENHA'; 

Obs.: Pode-se utilizar o caracter asterisco para atribuir a permissão a todas as bases.