Ssh

通過 ssh 複製帶有重音符號的 sql 文件

  • August 31, 2016

我正在嘗試將一個數據庫從伺服器 A 遷移到伺服器 B。

數據庫是mysql。該數據庫有一些帶有ç,ãé,…等字元的記錄

數據庫編碼為UTF8

所以在伺服器A上我像這樣導出

mysqldump -u root -p sis > sis3.sql  

然後我打開文件(用vi)並且字元不正確。所以我嘗試了

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

還不行。然後

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

現在文件似乎沒問題。

副本

複製到伺服器 B 是從伺服器 B 使用

scp -i p root@0.0.0.0:/home2/sis3.sql ~/

但是每當我將字元集複製到伺服器 B 時,該文件就永遠不會正常。“特殊”字元總是錯誤的。

我嘗試以三種方式導入(latin1,utf8,無預設),都出錯了。

我這樣導入:

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

當然,更改預設字元集。

但是,在我導入 mysql 之前,該文件已經“損壞”,我認為這可能導致過度 ssh 傳輸。

有沒有辦法轉移mysql數據庫而沒有這個問題?

伺服器資訊

伺服器 A

Linux version 2.6.32-5-amd64 (Debian 2.6.32-48squeeze6) (jmm@debian.org) (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=

伺服器 B

Linux version 4.4.0-0.bpo.1-amd64 (debian-kernel@lists.debian.org) (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=

我發現了一些對其他人有用的東西

http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion

事情是導出為 latin1 並將文件更改為“set NAMES utf8”,因為我所有的表都是 utf8。

工作。

  1. 檢查您的終端或終端仿真器是否使用UTF-8編碼。

locale轉儲 shell 的配置,而不是終端仿真器的配置。

如果使用--default-character-set=utf8,輸出將被utf8編碼。因此,如果您的終端(在伺服器 A 上)未正確顯示,則您的終端配置已損壞。

例如在 gnome-terminal 菜單中,選擇Terminal,Set Character Encoding 2. 如果伺服器 A 和 B 上文件的 md5sum 校驗和相同,則可以“確定”文件已正確傳輸。

引用自:https://unix.stackexchange.com/questions/306995