[精讚] [會員登入]
1674

將資料由SFS3 移機到 SFS3U

如果您是 SFS3 的使用者,架了 SFS3U ,資料當然得轉移過來才有意義呀!

分享此文連結 //n.sfs.tw/12367

分享連結 將資料由SFS3 移機到 SFS3U@杜子的網管筆記
(文章歡迎轉載,務必尊重版權註明連結來源)
2018-07-23 08:05:52 最後編修
2018-05-11 13:07:18 By 杜子
 

如果您是 SFS3 的使用者,架了 SFS3U ,資料當然得轉移過來才有意義呀!

把資料搬到 SFS3U 主機,前提是,先把 SFS3U  主機架好!

請參考前一篇文章 https://n.sfs.tw/content/index/12362 架好 SFS3U 專用的主機。

接下來,你要做的只有三件事,但每一件都有若干步驟,請小心操作:

 

1. 把 SFS3 資料庫搬到 SFS3U 主機內

(1)利用 SFS3 的 system_utf8 模組,產出 utf8mb4 編碼的資料庫

注意!在轉碼過程中,可能會發生失敗情形,原因通常就是Maria DB (即MySQL) 預設 index 的欄位長度為 767bytes,由於這裡要產出 utf8mb4 編碼的資料庫,每個字元佔4bytes,sfs3中有些  table 的 key 設定較複雜,會發生欄位長度不足的情況而使轉檔過程中斷。

請利用 root 登入 sfs3 主機,並編輯 /etc/my.cnf 檔,加入以下設定值

max_allowed_packet = 100M   (加入這行,可以讓轉碼時每次處理 5000筆以上,加快速度)
 innodb_file_format = Barracuda
 innodb_file_format_max = Barracuda
 innodb_file_per_table = 1
 innodb_large_prefix

#vi /etc/my.cnf

參考 https://n.sfs.tw/content/index/12360 的 (13) 點說明,不要填錯位置。

改完 my.cnf ,記得重啟 mysql 服務。(注意!你的重啟指令可能不同)

#systemctl restart mariadb.service 

 

(2)利用 root 登入原 SFS3 主機,並利用 mysqldump 把該資料庫匯出成 sql 檔

# mysqldump -uroot -p --add-drop-table sfs3_utf8mb4 > sfs3u.sql

上面的指令,是假定你利用 system_utf8 產生資料庫時,使用的資料庫名稱是預設的 sfs3_utf8mb4

 

(3)利用 ssh  指令把該 sql 檔傳到 SFS3U 主機 (範例中是假設 sfs3u 主機位在 163.17.43.23,您要改成自己的 IP)

#scp sfs3u.sql root@163.17.43.23:~

 

(4)利用 root 登入 SFS3U 主機,並把 sql 檔匯入 MySQL 資料庫

(這裡別弄錯!要換登入到 SFS3U 主機哦!不是在 SFS3 主機貼這個指令!!)

#mysqladmin -u root -p create sfs3u --default-character-set=utf8mb4
#mysql -uroot -p –default-character-set=utf8mb4 sfs3u < /root/sfs3u.sql 

 

2. 把 SFS3 主機中,sfs3  底下的 data 目錄搬到 SFS3U 主機中  sfs3u 目錄,覆蓋原有的 data 目錄

(1)利用  root 登入原 SFS3 主機,並利用 tar 打包 sfs3 的 data 目錄

#cd /var/www/html/sfs3   (目錄位置可能不同)
#tar zcvf data.tar.gz data

(2)利用 ssh  指令把該 壓縮檔傳到 SFS3U 主機 (範例中是假設 sfs3u 主機位在 163.17.43.23,您要改成自己的 IP)

#scp data.tar.gz root@163.17.43.23:~

(3)利用 root 登入 SFS3U 主機,並把該壓縮檔解開覆蓋 sfs3u 底下的 data 目錄

(這裡也別弄錯!要換登入到 SFS3U 主機哦!不是在 SFS3 主機貼這個指令!!)

#cd /var/www/html/sfs3u
#tar zxvf /root/data.tar.gz
#chmod -R 777 data

 

2018.05.13 補充

考量到 data 目錄中可能會有中文檔名的問題,如果直接用 tar  打包,再用 scp  傳過去解開,那些中文檔名都會變亂碼。(因為環境編碼由 big5 變 utf-8  了)

感謝本市立新國小資訊組長提供解法,只要利用 rsync 指令就能解決 (舊主機是 CentOS 5, CentOS6, CentOS7皆可適用)

方法就是以 ssh 登入 SFS3U 主機,然後下這個指令 (不是照著貼就好,該改成自己的就要改!)

#rsync -aogprtv --iconv=UTF-8,BIG5 root@sfs3_ip:/var/www/html/sfs3/data /var/www/html/sfs3u

參數 --iconv=UTF-8,BIG5 的意思就是舊主機環境是 BIG5 ,取回資料後轉換成 UTF8 編碼的檔名

sfs3_ip是指你舊的 sfs3 主機的 ip 喔!記得要修改。

注意!上面的指令中,也是假定你的舊的 sfs3 的 data 目錄位在 /var/www/html/sfs3/data/ ,如果有不同,要自行更改。

2018.07.23 補充    感謝嘉義縣網老師提供解法參考

有關「 data 目錄中可能會有中文檔名的問題,如果直接用 tar  打包,再用 scp  傳過去解開,那些中文檔名都會變亂碼。」的問題
提供另一種解法參考

1.安裝convmv
yum install convmv

2.執行檔名轉碼
convmv -f big5 -t utf-8 -r /var/www/html/sfs3u/data/* --notest

-f 原始編碼
-t 要轉的編碼
-r 遞迴
--notest 真的轉碼(不然只是測試)

3. 後續已知問題處理 (以下假定您的 sfs3u 安裝在 /var/www/html/sfs3u/ 裡)

由於 data 目錄的資料是來自原 SFS3 主機,裡面有些東西和字碼有關的,是使用 big5 字碼,所以在 SFS3U 中可能會變成亂碼,目前已知至少有三個地方要修正。
將來若再有發現問題,會更新這個網頁。

(1)修正連結列

#rm /var/www/html/sfs3u/data/Module_Path.txt

(2)刪除製作成績單模組的成績單備註文字 (會自動使用預設值重建)

#rm -rf /var/www/html/sfs3u/data/school/score_chart/*.*

(3)刪除匯入讀卡成績這個模組的匯入成績暫存檔

#rm /var/www/html/sfs3u/data/temp/teacher/score/*

這裡,因為檔名是亂碼,所以要用 * 代表所有檔案,逐一自行按 y 刪除。


 

END

你可能感興趣的文章

將資料由SFS3 移機到 SFS3U 如果您是 SFS3 的使用者,架了 SFS3U ,資料當然得轉移過來才有意義呀!

取得表單 Checkbox 已被勾選的項目 在 HTML 表單中常常在送出前需要做前端檢查, 除了減少伺服器負擔, 也可以減少使用者一來一往所花費的時間. 表單中大

CentOS 7.4 For SFS3U VM機下載說明 要怎麼快速架好一台 For SFS3U 的 CentOS 主機呢?

CentOS 7.4系統安裝 (For SFS3U 量身訂作) 您的聲音,我們聽到了! 為了解決 SFS3 的BIG-5字碼問題,這一年來我們改版了 SFS3,全面採用 UTF8MB4 字碼。現在,就從專用主機架設開始!

SFS3U 的安裝與更新 「SFS3-Unicode補完計劃」已屆完工,除了支援 108課綱,也一併解決多年來 Big-5字碼問題,新版本的 SFS3 簡稱 SFS3U。

隨機好文

將資料由SFS3 移機到 SFS3U 如果您是 SFS3 的使用者,架了 SFS3U ,資料當然得轉移過來才有意義呀!

CentOS 7.4 For SFS3U VM機下載說明 要怎麼快速架好一台 For SFS3U 的 CentOS 主機呢?

學校活動照片與影片如何取得? 從今年度開始,將要求各位行政同仁把照片或活動影片擺到 Google 雲端硬碟

Windows Active Directory 啟動 LDAPS 連線 重架了 Windows Server 2016 也安裝了 Windows AD 服務, 當網域伺服器架好, 預設的 38

利用 PowerShell 指令大量建立 Windows Server 2016 帳號 利用 PowerShell 指令大量建立 Windows Server 2016 帳號