Você está na página 1de 15

Instalação – Banco de Dados T.I.

Versão 8.4 – 19/01/2010

Índice
PostgreSql.............................................................................................................................................2
Preparando a instalação:..............................................................................................................2
Efetuar backup:..................................................................................................................2
Limpar a instalação anterior:.............................................................................................2
Configurações Linux:...........................................................................................................................2
Em /etc/hosts:.......................................................................................................................................2
Instalação:...................................................................................................................................2
1 – Download:....................................................................................................................3
2 – Descompactar:.............................................................................................................3
3 – Pré-Configurações:......................................................................................................3
4 - Compilar.......................................................................................................................4
5 - Instalar..........................................................................................................................4
Configurações Pós – instalação:..................................................................................................4
Criar um grupo no linux (se ainda não existir):.................................................................4
Criar um usuário no linux (se ainda não existir):..............................................................4
Criar um diretório de log (em /var/lib/pgsql/log):.............................................................4
Altera o grupo e dono do diretório:...................................................................................4
Criar um script de inicialização (para subir o Banco de Dados automático):....................4
Editar o arquivo /etc/init.d/postgresql e alterar o caminho do log:....................................5
Para inicializar o banco de dados automaticamente:.........................................................5
Criar links em /usr/bin de todos os pg_* da pasta /var/lib/pgsql/bin.................................5
Inicialização do diretório para o Banco de Dados:.....................................................................5
Pré-instalar as seguintes contribs em Template1:..............................................................6
Alterar o local do pg_xlog:.........................................................................................................6
Para inicializar o banco de dados: ..............................................................................................6
Arquivos de configurações:.........................................................................................................6
Arquivo pg_hba.conf:........................................................................................................6
Arquivo postgresql.conf:...................................................................................................7
Para a versão 8.4.X...................................................................................................7
Alterar timezone para buscar data e hora do servidor...............................................................10
Adicionar no arquivo /etc/sysctl.conf as linhas:.......................................................................10
Rotinas de Backup:...................................................................................................................10
Restauração do Backup dos dados:...........................................................................................11
Anexo 1...............................................................................................................................................12
Cálculos para Shared Buffers, Shmall e Shmmax:...................................................................12
Anexo 2...............................................................................................................................................13
Alterando a hora do PostgreSql para horário de verão:............................................................13
Anexo 3...............................................................................................................................................14
Motivos para a não inicialização do Postgresql:.......................................................................14
Dúvidas ou sugestões:........................................................................................................................15

1
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Descritivo dos padrões adotados para a instalação dos bancos de dados PostgreSql em Linux (Fedora
Core 4, 5 e 6) . Estes padrões devem ser seguidos obrigatoriamente, salvo alguma orientação contrária do
administrador de banco de dados.

PostgreSql
- Todas estas informações constantes deste manual podem ser encontradas em:
http://www.postgresql.org

Preparando a instalação:
Efetuar backup:
Se a máquina abrigar um banco de dados de produção, é necessário efetuar um backup:
pg_dumpall -U postgres > arquivo.sql

Limpar a instalação anterior:


Matar todos os processos referentes ao postmaster (Umas 3 ou 4 vezes)
killall postmaster

Remover todos os pacotes que forem encontrados:


rpm -qa |grep -i postgre (identifica os pacotes que devem ser excluídos)
rpm -ev nome_dos_pacotes (exclui os pacotes)

ou
dpkg -l |grep postgres (sistemas baseados em pacotes deb)

Observação: Se der falha na exclusão por dependências de pacotes é só não excluir o libs.

Verificar se já não existe /var/lib/pgsql. Se existir e não for um ponto de montagem (se for um diretório
comum), remove.

Configurações Linux:
Todos os passos a seguir devem ser executados como root.

Em /etc/hosts:
<IP-address> <fully-qualified-machine-name> <machine-name>
Exemplo:
127.0.0.1 localhost.localdomain localhost
10.0.0.0 <nome da máquina>.<host>. <nome da máquina>

Instalação:
Basicamente para efetuar a instalação são necessários 5 passos:
1 - Download ==> Baixar os pacotes
2 - Descompactar ==> Descompactar os pacotes
3 - Pré-configurações ==> Configurações iniciais

2
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

4 - Compilar ==> Compilar os pacotes do PostgreSQL


5 - Instalar ==> Instalar os pacotes

Observação: Estes passos devem ser executados como usuário ROOT.

1 – Download:
Baixar os binários da versão desejada no site do PostgreSql.

2 – Descompactar:
Intalar como usuário root:
cd /root

Descompactar:
tar -xzvf postgresql-8.x.x.tar.gz
x = Desempacotar
z = Descompactar
v = Apresenta em tela (verbose)
f = Arquivo que eu estou descompactando

Acertar os direitos:
chown root:root -R postgresql-8.x.x

3 – Pré-Configurações:
Dentro do diretório postgresql-8.x.x, executar:

./configure --prefix=/var/lib/pgsql --enable-integer-datetimes -enable-nls=ALL --with-pgport=5432


--with-perl --with-python --enable-debug (a partir da 8.4)

Onde:
--prefix=/var/lib/pgsql = Local de instalação do Banco de Dados

--enable-integer-datetime = Suporte a 64 bits (Padrão é 32 bits)

--enable-multibyte = Suporte a caracteres Multibyte

--enable-nls = Suporte a todos os padrões de língua

--with-pgport = Porta diferente da porta padrão (5432)

--with-perl = Construir a linguagem PL/Perl do lado servidor

--with-python = Construir a linguagem PL/Python do lado servidor

--enable-debug = Compila todos os programas e bibliotecas com símbolos de


depuração. Isto significa que os programas podem ser executados através do depurador para
analisar problemas.

Observação: Para ver todas as opções: ./configure --help | less

3
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

| less = paginar ou
http://pgdocptbr.sourceforge.net/pg80/install-procedure.html

4 - Compilar
Dentro do diretório postgresql-8.x.x:
make

5 - Instalar
Dentro do diretório postgresql-8.x.x:
make install (tem que parar o Banco de Dados)

Entrar em contrib (são contribuições, como plugins ):


cd contrib
make install

Observação: Os arquivos de contrib ficam instalados em /var/lib/pgsql/share/contrib

Configurações Pós – instalação:


Criar um grupo no linux (se ainda não existir):
groupadd postgres -g <NÚMERRO DO GRUPO DESEJADO>

Criar um usuário no linux (se ainda não existir):


useradd postgres -g postgres -d /var/lib/pgsql/ -u 4175
-g = no grupo primário
-d = no local
-u = id do usuário para possuir user com o mesmo ID em servers diferentes

Para achar o id do usuário ==> id <nome_user>

Acertar a senha:
passwd postgres

Criar um diretório de log (em /var/lib/pgsql/log):


mkdir /var/lib/pgsql/log
touch /var/lib/pgsql/log/pgsql_start.log (o comando touch irá criar um arquivo em branco)

Altera o grupo e dono do diretório:


chown -R postgres:postgres /var/lib/pgsql/

Criar um script de inicialização (para subir o Banco de Dados automático):


copiar postgresql-8.x.x/contrib/start-scripts/linux para /etc/init.d/postgresql
chmod 755 /etc/init.d/postgresql

4
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Editar o arquivo /etc/init.d/postgresql e alterar o caminho do log:


Alterar prefix para:
prefix =/var/lib/pgsql

Alterar $PGDATA para :


PGDATA="/var/lib/pgsql/data"
ou
PGDATA="$prefix/data"

Alterar $PGLOG para :


PGLOG="$prefix/log/pgsql_start.log"
ou
PGLOG="/var/lib/pgsql/log/pgsql_start.log"

Para inicializar o banco de dados automaticamente:


No arquivo /etc/rc.d/rc.local inserir: /etc/init.d/postgresql start

Criar links em /usr/bin de todos os pg_* da pasta /var/lib/pgsql/bin.


ln -s /var/lib/pgsql/bin/pg_config
ln -s /var/lib/pgsql/bin/pg_controldata
ln -s /var/lib/pgsql/bin/pg_ctl
ln -s /var/lib/pgsql/bin/pg_dump
ln -s /var/lib/pgsql/bin/pg_dumpall
ln -s /var/lib/pgsql/bin/pg_resetxlog
ln -s /var/lib/pgsql/bin/pg_restore
ln -s /var/lib/pgsql/bin/pg_standby
ln -s /var/lib/pgsql/bin/psql
ln -s /var/lib/pgsql/bin/vacuumdb

Inicialização do diretório para o Banco de Dados:


Tem que ser como usuário postgres:
su - postgres

Cria um diretório data/ onde ficarão os bancos.


/var/lib/pgsql/bin/initdb -U postgres -D /var/lib/pgsql/data -E LATIN1

initdb = Cria uma raiz de dados para a versão do PostgreSQL utilizada


-E LATIN1 = Cria os templates 0 e 1 em Latin1

− Para bases de portais drupal


/var/lib/pgsql/bin/initdb -U postgres -D /var/lib/pgsql/data -E UTF-8

Na versão 8.4, depende do locale do server. Se der erro, é só alterar:


vim /etc/sysconfig/i18n
alterar de LANG="en_US.UTF-8" para LANG="pt_BR.ISO8859-1" e reiniciar o server

No caso de servidores de portais, isso não deve ser feito e as bases devem ser UTF-8.

5
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Pré-instalar as seguintes contribs em Template1:


Como root
Iniciar o PostgreSql
/etc/init.d/postgresql start

Dblink (Para executar Sql's em bancos de outros servidores)


Entrar em postgresql-8.x.x /contrib/dblink e executar:
psql -U postgres -d template1 -f dblink.sql

Adminpack (Packages de administração remota de log's)


Entrar em postgresql-8.x.x /contrib/adminpack e executar:
psql -U postgres -d template1 -f adminpack.sql

Cube (Formata números com entre () )


Entrar em postgresql-8.x.x /contrib/cube e executar:
psql -U postgres -d template1 -f cube.sql

Pg_Stat_Statements ()
Entrar em postgresql-8.x.x /contrib/pg_stat_statements e executar:
psql -U postgres -d template1 -f pg_stat_statements.sql

Parar o PostgreSql
/etc/init.d/postgresql stop

Alterar o local do pg_xlog:


Este procedimento deve ser adotado quando o servidor possuir partições diferentes para dados e logs.
Para executar este procedimento, é obrigatório que o banco de dados esteja fora do ar.

- Renomear o diretório pg_xlog localizado em /var/lib/pgsql/data para pg_xlog-old


- Copiar tudo deste diretório renomeado para a partição dos logs (esta partição deve possuir ou o
nome ou um diretório com o nome de pg_xlog)
- Criar um link virtual em /var/lib/pgsql/data para o novo local de pg_xlog chamado pg_xlog
ln -s ../pg_xlog
- Dar os direitos corretos para as partições envolvidas:
chown -R postgres:postgres /var/lib/pgsql/???

Para inicializar o banco de dados:


Como root, efetuar os comandos abaixo.
/etc/init.d/postgresql start - Levanta o BD
/etc/init.d/postgresql status - Verifica se está no ar

Arquivos de configurações:
Arquivo pg_hba.conf:
Alterar o arquivo /var/lib/pgsql/data/pg_hba.conf (criar uma cópia do arquivo original antes de alterar):

Acrescentamos a liberação de Ip's da nossa rede para acesso ao Banco:

6
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

#Tipo BD Usuário IP + Mascara Método de autenticação


host all all 127.0.0.1/32 trust
host all all 10.0.0.0/16 md5 // Rede interna
host all all 10.1.0.0/16 md5 // Rede interna
host all all 192.168.0.0/24 md5 // DMZ
host all all 192.168.7.0/24 md5 // Farmacap
host all all 192.168.6.0/24 md5 // Farmacap

Arquivo postgresql.conf:
Alterar o arquivo /var/lib/pgsql/data/postgresql.conf (criar uma cópia do arquivo original antes de alterar):

Para a versão 8.4.X


*********************************************************************************
***** Locais dos arquivos
*********************************************************************************
data_directory = '/var/lib/pgsql/data' # use data in another directory
# (change requires restart)
hba_file = '/var/lib/pgsql/data/pg_hba.conf' # host-based authentication file
# (change requires restart)
ident_file = '/var/lib/pgsql/data/pg_ident.conf' # ident configuration file
# (change requires restart)
*********************************************************************************
Conexões e autenticação
*********************************************************************************
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)

max_connections = 128 # (change requires restart)


superuser_reserved_connections = 3 # (change requires restart)
authentication_timeout = 1min # Tempo de autenticação para se tornar client
password_encryption = on # password encryption

*************************************************************************************
* Consumo de recursos
*********************************************************************************
shared_buffers = 1GB # (Valor calculado – Anexo 1)
work_mem = 1GB # (Valor calculado – Anexo 1)
maintenance_work_mem = 32MB # min 1MB
vacuum_cost_delay = 50ms # 0-1000 milliseconds
vacuum_cost_limit = 200 # 0-10000 credits (vacuum_cost_delay * 4)

*********************************************************************************
Log de escrita prévia (WAL)
*********************************************************************************
fsync = on # turns forced synchronization on or off
synchronous_commit = on # immediate fsync at commit

7
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

wal_sync_method = fsync # the default is the first option


checkpoint_segments = 16 # in logfile segments, min 1, 16MB each
checkpoint_timeout = 5min # range 30s-1h
archive_command= 'cp -i %p /var/lib/pgsql/pitr/transaction_logs/%f' # Somente para máquinas que forem
# utilizar o PITR.

*************************************************************************************
* Planejamento de consultas
*********************************************************************************
effective_cache_size = 2GB # 2/3 da RAM disponível

*************************************************************************************
* Log de Erros
*********************************************************************************
log_destination = 'stderr' # Valid values are combinations of
# stderr, syslog and eventlog,
# depending on platform.

logging_collector = on # Enable capturing of stderr and csvlog


# into log files. Required to be on for csvlogs.
# (change requires restart)

// Não esquecer de deixar o diretório de logs (pgsql) com o usuário e grupo postgres e com direitos 700
log_directory = '/mnt/logs/pgsql/access'
ou
log_directory = '/var/log/pgsql/access'

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern.


# Can include strftime() escapes
log_truncate_on_rotation = on

log_rotation_age = 1d # Automatic rotation of logfiles will


# happen after that time. 0 disables.
log_rotation_size = 100MB # Automatic rotation of logfiles will
# happen after that much log output.
# 0 disables.
client_min_messages = log
log_min_messages = log
log_error_verbosity = default # terse, default, or verbose messages
log_min_error_statement = log
log_min_duration_statement = 10000 # -1 is disabled, 0 logs all statements
# and their durations.
log_checkpoints = on
log_connections = on
log_disconnections = on
log_duration = on
log_hostname = on
log_line_prefix = 'User=%u, Database=%d, Host=%r, Tempo=%t, Tag=%i'
# Special values:

8
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

# %u = user name
# %d = database name
# %r = remote host and port
# %h = remote host
# %p = PID
# %t = timestamp (no milliseconds)
# %m = timestamp with milliseconds
# %i = command tag
# %c = session id
# %l = session line number
# %s = session start timestamp
# %x = transaction id
# %q = stop here in non-session
# processes
# %% = '%'
# e.g. '<%u%%%d> '
log_lock_waits = on # log lock waits >= deadlock_timeout
log_statement = 'ddl' # none, ddl, mod, all

*********************************************************************************
***** Estatísticas de tempo de execução
*********************************************************************************
update_process_title = on

*********************************************************************************
***** Statistics Monitoring
*********************************************************************************
log_parser_stats = off
log_planner_stats = off
log_executor_stats = off
log_statement_stats = on

*********************************************************************************
***** Vacuum Automático
*********************************************************************************
autovacuum = on # enable autovacuum subprocess?
# 'on' requires stats_start_collector
# and stats_row_level to also be on
autovacuum_vacuum_threshold = 100 # min # of tuple updates before vacuum
tovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
# (change requires restart)

*********************************************************************************
***** Padrões de conexão do cliente
*********************************************************************************
statement_timeout = 20min # 20 minutos em ms
datestyle = 'iso, dmy'

9
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

client_encoding = LATIN1 # Para bases gerais


OU
client_encoding = UTF-8 # Para bases utilizadas pelo Drupal

lc_messages = 'pt_BR.ISO8859-1' # Para bases gerais


lc_monetary = 'pt_BR.ISO8859-1'
lc_numeric = 'pt_BR.ISO8859-1'
lc_time = 'pt_BR.ISO8859-1'
OU
lc_messages = 'pt_BR.UTF-8' # Para bases utilizadas pelo Drupal
lc_monetary = 'pt_BR.UTF-8'
lc_numeric = 'pt_BR.UTF-8'
lc_time = 'pt_BR.UTF-8'

default_text_search_config = 'pg_catalog.portuguese' # default configuration for text search

*********************************************************************************
***** Compatibilidade de versão e de plataforma
*********************************************************************************
add_missing_from = off
default_with_oids = on

Alterar timezone para buscar data e hora do servidor


O postgresql trabalha com um timezone próprio o que pode gerar problemas com horário de verão. Para
evitar este problema criaremos um link para o timezone do servidor:

Como usuário POSTGRES


cd /var/lib/pgsql/share
mv timezone timezone-ori
ln -s /usr/share/zoneinfo/ timezone

Adicionar no arquivo /etc/sysctl.conf as linhas:


kernel.shmall = 3221225472 (3 GB em bytes – valor calculado – Anexo 1)
kernel.shmmax = 3221225472 (3 GB em bytes – valor calculado – Anexo 1)

Verificar e se necessário alterar o grupo e dono do diretório pgsql pela última vez:
chown -R postgres:postgres /var/lib/pgsql/

Reiniciar o Servidor para que as configurações de kernel sejam efetivadas:


init 6

Rotinas de Backup:
Copiar para /var/lib/pgsql/scripts_bkp os seguintes scripts:
backup_pg.sh
copia_fita.sh

Efetuar os ajustes necessários nos scripts.

10
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Acertar estes scripts de acordo com as necessidades e dar direitos


chmod 755
chown root:root

Verificar o ponto de montagem no /


chmod 755
chown root:root

Agendar no Cron as rotinas abaixo:


crontab -e

Observação: Verificar se o Cron está no ar. Se não estiver, avisar a equipe de Infra-Estrutura.

Restauração do Backup dos dados:


Não esquecer de criar os bancos de dados com o encoding = “LATIN1” pu “UTF-8” dependendo da
utilização.

psql -U postgres -f arquivo.txt template1 (Como su postgres – restaura todo o banco)


ou
psql -U postgres < arquivo.txt (Como ROOT)

11
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Anexo 1
Cálculos para Shared Buffers, Shmall e Shmmax:
Para saber quanto de memória tem o servidor para os cálculos de Shmall e Shmmax:
cat /proc/meminfo
Verificar a variável memtotal

Exemplo: Temos 4 GB de RAM. Usaremos:


1 GB => Sistema Operacional
3 GB => Banco de Dados

SHARED MEMORY = 3 GB
SHMALL = 3 * 1024 * 1024 * 1024 = 3221225472 (Valores em Bytes)
SHMMAX = 3 * 1024 * 1024 * 1024 = 3221225472 (Valores em Bytes)

Usaremos 1 GB de Shared Buffers (1/3 da memória disponível para o BD): Aumentando o número de
buffers fará com que os clientes encontrem as informações que procuram em cache e evita requisições
onerosas ao sistema operacional.
Cuidado: se aumentar muito a memória compartilhada (shared buffers) pode acarretar uso da memória
virtual (swap).

SHARED BUFFERS = (1 * 1024 * 1024) = 131072 (1 GB em Kb)


8
Observações:
- Teremos 131072 blocos de 8 Kb cada um para Shared Buffers.
- Se o valor de shared buffers estiver muito alto, o PostgreSql não será inicializado.

Adicionar no arquivo /etc/sysctl.conf as linhas:


kernel.shmall = 3221225472
kernel.shmmax = 3221225472

Alterar no arquivo /var/lib/pgsql/data/postgresql.conf:


shared_buffers = 131072
work_mem = 131072

12
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Anexo 2
Alterando a hora do PostgreSql para horário de verão:
Para este procedimento, basta seguir os seguintes passos:
- Acertar o horário do servidor
- Reiniciar o PostgreSql

Se isso não foi o suficiente, faça:


- Vá até /var/lib/pgsql/share/timezone/Brazil
cd /var/lib/pgsql/share/timezone/Brazil

- Renomeie o arquivo East para East-ORIGINAL


mv East East-ORIGINAL

- Crie o seguinte link virtual:


ln -s /etc/localtime East
ou
- Copie o arquivo /etc/localtime para /var/lib/pgsql/share/timezone/Brazil
cp /etc/localtime /var/lib/pgsql/share/timezone/Brazil/East

- Chown postgres:postgres East


- Reinicie o PostgreSql

Para voltar para o horário comum, basta fazer o caminho inverso.

13
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Anexo 3
Motivos para a não inicialização do Postgresql:
- Existe algum arquivo ou diretório dentro de /var/lib/pgsql sem direitos ou com o dono diferente de
postgres.

- O valor de Shared Buffers calculado está muito alto.

- Direitos dos diretórios incorretos.

- Conteúdo do pg_xlog não foi todo copiado para a pasta de destino.

14
Instalação – Banco de Dados T.I.
Versão 8.4 – 19/01/2010

Dúvidas ou sugestões:
zeguedel@gmail.com

15