[精讚] [會員登入]
406

將資料由SFS3 移機到 SFS3U

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

此文完整連結 http://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 刪除。


 

你可能感興趣的文章

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

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

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

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

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

梁益榮
請問杜老師,我從SFS3匯入資料到SFS3U之後,原來的supervisor帳號就不見了,很多管理工作都不能進行,應該怎麼處理呢?謝謝。 @2018-08-15 15:59:26

杜子的網管筆記
從SFS3匯入資料到SFS3U, 當然會把原本剛建好的 SFS3U 的資料庫蓋掉, 所以預設的supervisor帳號當然也會不見. 此時你就要改用 sfs3 裡的管理帳號進行登入.
2018-08-16 09:45:23

隨機好文

Windows 手動設定 IP ,重開機後自動消失 今天幫同事處理一部 Windows 10 的 IP 設定問題, 手動設定完,重開機後原本設定好的 IP 會憑空消失, 全

飛碟 UPS 市電斷電時自動關機 買了一張飛碟 UPS 的 SNMP 網卡, 原本是希望學校的兩部 VMware ESXi 在停電時能自動關機, 沒想到,

關於在公用電腦中執行題庫系統發生錯誤的問題 以下文章題針對豐南國中的公用電腦執行環境所寫,如果您不是豐南國中成員,請參考即可。 本校的公用電腦都是使用 AD 網域方