Copie o arquivo sql sobre o ssh com acentos

1

Estou tentando migrar um banco de dados do servidor A para o servidor B.

O banco de dados é o mysql. Este banco de dados tem alguns registros com caráter como ç, ã é, ...

A codificação do banco de dados é UTF8

Então, no servidor A eu exporto assim

mysqldump -u root -p sis > sis3.sql  

Depois abro o arquivo (com vi ) e os caracteres não estão OK. Então eu tentei

 mysqldump -u root -p sis --default-character-set=utf8 > sis3.sql 

Ainda não está OK. Então

 mysqldump -u root -p sis --default-character-set=latin1 > sis3.sql 

E agora o arquivo parece OK.

A cópia

A cópia para o servidor B é feita a partir do servidor B usando

scp -i p [email protected]:/home2/sis3.sql ~/

Mas sempre que o charset eu copio para o servidor B, o arquivo nunca é OK. os caracteres "especiais" estão sempre errados.

Eu tentei importar de três maneiras (latin1, utf8, sem padrão), tudo deu errado.

Eu importo assim:

mysql -u root -p"pwdpwdpwd" --default-character-set=utf8 sis < sis3.sql 

Claro, alterando o conjunto de caracteres padrão.

Mas, como antes eu importo para o mysql, o arquivo já está "danificado", acho que isso provavelmente causou a transferência do ssh.

Existe uma maneira de transferir o banco de dados mysql sem esse problema?

Informações dos servidores

Servidor A

Linux version 2.6.32-5-amd64 (Debian 2.6.32-48squeeze6) ([email protected]) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Tue May 13 16:34:35 UTC 2014
# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=

Servidor B

Linux version 4.4.0-0.bpo.1-amd64 ([email protected]) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Debian 4.4.6-1~bpo8+1 (2016-03-20)
# locale
LANG=pt_BR.UTF-8
LANGUAGE=
LC_CTYPE="pt_BR.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="pt_BR.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="pt_BR.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=
    
por lcssanches 31.08.2016 / 17:42

3 respostas

2

Encontrei algo que pode ser útil para outras pessoas

link

O negócio é exportar como latin1 e mudar o arquivo para "set NAMES utf8", já que todas as minhas tabelas são utf8.

Trabalhou.

    
por 31.08.2016 / 20:20
1
  1. Verifique se o seu terminal ou emulador de terminal está usando a codificação UTF-8 .

    locale despeja a configuração do seu shell, não do seu emulador de terminal.

    Se você usar --default-character-set=utf8 , a saída será utf8 codificada. Então, se o seu terminal (no servidor A) não mostrar corretamente, a configuração do seu terminal está quebrada.

    Por exemplo no menu do gnome-terminal, selecione Terminal , Set Character Encoding

  2. Se a soma de verificação md5sum do arquivo, no servidor A e B, for idêntica, você pode "ter certeza" de que o arquivo foi transferido corretamente.

por 31.08.2016 / 18:57
0

Não tem nada a ver com o seu emulador de terminal.

mysqldump -u root -p sis --default-character-set=latin1 > sis3.sql

mysql -u root -p"pwdpwdpwd" --default-character-set=utf8 sis < sis3.sql

Importe o arquivo usando o mesmo conjunto de caracteres com o qual você o exportou.

O que você vê no arquivo exportado depende das configurações da ferramenta usada para visualizá-lo. Não confunda o problema - veja como o mysql interpreta os dados. Se o backup for enorme, faça algumas experiências com um conjunto de dados menor.

Presumivelmente, isso é openssh? Contanto que você não esteja usando algum outro software no meio, o arquivo não será modificado em trânsito. Você pode verificar isso usando md5sum ou similar.

    
por 01.09.2016 / 01:06