segunda-feira, 28 de janeiro de 2013

Convertendo MySQL para Postgresql


http://en.wikibooks.org/wiki/Converting_MySQL_to_PostgreSQL


Dump your tables with
mysqldump --compatible=postgresql databasename > outputfile.sql



but even then you will have to change quote escaping:
sed -ri "s/([^\\])\\\'/\1\'\'/g" outputfile.sql
You also have to manually modify the data types etc. as discussed later.
After you convert your tables, import them the same way you were used to in MySQL, that is
psql -h server -d databasename -U username -f data.sql

[edit]


List of available data types can be reached also by using psql's internal slash command \dT.
MySQLPostgreSQLANSI Standard SQLcomments
TINYINT
SMALLINT
MEDIUMINT
BIGINT
SMALLINT
SMALLINT
INTEGER
BIGINT
INTEGER
INTEGER
INTEGER
NUMERIC(20)
see [2]integer size in PostgreSQL is 4 Bytes signed (-2147483648 – +2147483647)
TINYINT UNSIGNED
SMALLINT UNSIGNED
MEDIUMINT UNSIGNED
INT UNSIGNED
BIGINT UNSIGNED
SMALLINT
INTEGER
INTEGER
BIGINT
NUMERIC(20)
INTEGER
INTEGER
INTEGER
NUMERIC(10)
NUMERIC(20)
SQL doesn't know UNSIGNED, all numbers are signed.
FLOAT
FLOAT UNSIGNED
REAL
REAL
FLOAT4
FLOAT4
DOUBLE
DOUBLE PRECISION
FLOAT8
BOOLEAN
BOOLEAN
BOOLEAN
MySQL Booleans are an alias for TINYINT(1); PostgreSQL doesn't auto-convert numbers into booleans.
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
TEXT
TEXT
TEXT
BINARY(n)
VARBINARY(n)
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
BYTEA
BYTEA
BYTEA
BYTEA
BYTEA
BYTEA
BIT(n)
BIT VARYING(n)
TEXT
TEXT
TEXT
TEXT
ZEROFILL
not available
not available
DATE
TIME
DATETIME
TIMESTAMP
DATE
TIME [WITHOUT TIME ZONE]
TIMESTAMP [WITHOUT TIME ZONE]
TIMESTAMP [WITHOUT TIME ZONE]
not available
TIME
TIMESTAMP
TIMESTAMP
column SERIAL
equals to:
column BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
or:
column INT DEFAULT SERIAL
equals to:
column INT NOT NULL AUTO_INCREMENT UNIQUE
column SERIAL
equals to:
CREATE SEQUENCE name;
CREATE TABLE table ( 
        column INTEGER NOT NULL
        DEFAULT nextval(name)
);
column SERIAL
Note for PostgresSQL:
SERIAL = 1 – 2147483647
BIGSERIAL = 1 – 9223372036854775807
SERIAL is in fact an entity named SEQUENCE. It exists independently on the rest of your table. If you want to cleanup your system after dropping a table, you also have to DROP SEQUENCE nameMore on that topic...

Note for MySQL:
column SERIAL PRIMARY KEY
or
column SERIAL,
PRIMARY KEY(column)
Will result in having 2 indexes forcolumn. One will be generated by thePRIMARY KEY constraint, and one by the implicit UNIQUE constraint present in the SERIAL alias. This has been reported as a bug and might be corrected.
column ENUM (value1, value2, [...])
column VARCHAR(255) NOT NULL,
CHECK (column IN (value1, value2, [...]))
or
CREATE TYPE mood AS ENUM ('sad','ok','happy');
CREATE TABLE person ( current_mood mood ... )
column VARCHAR(255) NOT NULL,
CHECK (column IN (value1, value2, [...]))
PostgreSQL doesn't have the ENUM types prior to 8.3, so you need to simulate it with contraints when using < 8.3.

[edit]


PostgreSQL com encoding LATIN1




Esta dica foi testada em Linux Debian Lenny, Squeeze e Ubuntu 9.10, com as versões 8.3 e 8.4 do PostgreSQL.

Primeiro, vamos mover tudo do diretório /var/lib/postgresql/8.4/main. Para isso faça o login com o usuário root:

$ su

Agora vamos navegar até o diretório:

# cd /var/lib/postgresql/8.4/main

Então vamos mover os arquivos para um diretório acima, ou anterior... como queiram falar:

# mkdir ../bkp
# mv * ../bkp


Faça o login com o usuário postgres:

# su postgres

E digite isso:

$ /usr/lib/postgresql/8.4/bin/initdb --pgdata=/var/lib/postgresql/8.4/main/ --encoding=LATIN1 --locale=C --username=postgres -W


Agora vamos precisar de apenas dois arquivos desses que movemos. Movi tudo, pois não sei o que cada um tem no diretório especificado, então fica mais fácil do que colar apenas o conteúdo do meu diretório. Então vamos voltar um diretório acima e mover dois arquivos:

# cd ../bkp
# mv server.* ../main
# cd ..
# chown postgres.postgres main

Agora você pode criar base de dados com encoding LATIN1.

Complementando... criar um banco em LATIN1 num cluster codificado em UTF-8:
CREATE DATABASE nome_do_banco ENCODING 'ISO8859-1' LC_CTYPE 'pt_BR.ISO8859-1' TEMPLATE template0;

segunda-feira, 14 de janeiro de 2013

Criando memória swap com a máquina em produção (ON-THE-FLY)


Muitas vezes o uso de memória de uma máquina se torna muito alto e pode ocorrer a necessidade de ter-se mais swap. O que fazer? Parar a máquina e todos os serviços que estão rodando e reparticionar o disco rígido com uma área de swap maior? Colocar mais pentes de memória?

Nessa dica veremos como criar um arquivo vazio e fazer o sistema operacional usá-lo como swap sem parar nenhum serviço, ou seja, com a máquina on-the-fly.

Configuração


Criar o path: /var/swap_area

# mkdir /var/swap_area

A linha de comando abaixo pega um espaço vazio do disco (/dev/zero) e cria em /var/swap_area um arquivo com o nome swap de 128 MB. Note que:
  • bs = Block Size, ou seja, tamanho do bloco, neste caso, 1k (1024 bytes);
  • count = número de blocos de 1k, que são 128.000 para criar 128 MB de swap, caso preciso de mais é so aumentar este número.

# dd if=/dev/zero of=/var/swap_area/swap bs=1024 count=128000

Verificando...

# ls -lh /var/swap_area

Dizendo para o sistema operacional usar o arquivo como swap:

# mkswap /var/swap_area/swap

Ativando:

# swapon /var/swap_area/swap

Tudo pronto! Confira:

# free -m

Para desativar:

# swapoff /var/swap_area/swap
# rm -rf /var/swap_area
 


Autor: Desconhecido.

quarta-feira, 2 de janeiro de 2013

Parametros Importante no OpenVPN



Um problema muito comum na utilização de VPNs é a utilização de conexões muito instáveis, como por exemplo, ADSLs ou 3G. Qualquer interrupção que ocorra na transmissão a VPN ficara off-line, sendo necessária uma intervenção de um administrador.
Para tratar este tipo de situação o OpenVPN possui uma série de configurações que permitem o reestabelecimento da conexão. A seguir uma descrição de cada um deles.

keepalive 10 60

A configuração keepalive permite que a conexão seja reiniciada caso não ocorra resposta dentro de um determinado período.
O primeiro número especifíca o intervalo, em segundos, de pings e o segundo o timeout. Após o timeout a VPN é automaticamente reiniciada. Caso a conexão não seja reestabelecida na primeira tentativa o OpenVPN tenta reconectar até tenha sucesso.

inactive 3600

A configuração inactive serve para especificar um tempo em segundos para que as tentativas de conexão sejam mantidas. No exemplo acima após 1 hora sem sucesso na conexão, o OpenVPN pára com as tentativas.

comp-lzo

A opção comp-lzo faz com que o OpenVPN passe a compactar os dados transmitidos através da VPN. O algoritmo utilizado é bastante leve, e portanto não será um grande empecilho com relação ao desempenho do processamento do servidor ou do cliente.

persist-key
persist-tun

As opções de configuração persist-key e persist-tun fazem com que o OpenVPN mantenha tanto a interface de tunelamento quanto as chaves carregadas em memória, tornando o reestabelecimento da conexão mais rápido nos casos de queda.

float

A opção float é bastante útil quando se utiliza conexões com IP dinâmico. Desta forma ao trocar o IP a conexão é reestabelecida da mesma forma. Essa situação é muito comum quando se utiliza serviços de DNS dinâmico como NoIP por exemplo.

# Security 1 and 2 and 3 
script-security 3

comp-lzo

keepalive 10 60
persist-key
persist-tun
inactive 3600
float
log-append /var/log/openvpn/openvpn-sm.log
status /var/log/openvpn/openvpn-sm-udp-status.log
fragment 1400

mssfix 1400