「公保與勞保資料匯入」修訂間的差異

出自跨校選修
跳至導覽 跳至搜尋
行 11: 行 11:
 
*#若為情況二:secure_file_priv = /var/lib/mysql-files/ 代表 '''只能從這個目錄讀檔'''
 
*#若為情況二:secure_file_priv = /var/lib/mysql-files/ 代表 '''只能從這個目錄讀檔'''
 
*#結果是情況三:secure_file_priv = (空白) 代表 '''任何目錄都可以讀,只要權限允許'''
 
*#結果是情況三:secure_file_priv = (空白) 代表 '''任何目錄都可以讀,只要權限允許'''
* /tmp 的權限表是「drwxrwxrwt」任何人都可以觸及與建檔,最後的字母「t」代表 sticky bit(黏著位),'''即使目錄對所有人都有寫入權限,也不能隨便刪除別人的檔案'''。只有以下三種情況可以刪除檔案:
+
* /tmp 的權限表是「drwxrwxrwt」,/var/tmp 的權限表是「drwxrwxrwx」,任何人都可以觸及與建檔。最後的字母「t」代表 sticky bit(黏著位),'''即使目錄對所有人都有寫入權限,也不能隨便刪除別人的檔案'''。只有以下三種情況可以刪除檔案:
 
*#檔案擁有者
 
*#檔案擁有者
 
*#目錄擁有者
 
*#目錄擁有者

於 2026年3月10日 (二) 18:29 的修訂


CSV 資料製備

DS720+ 的 adminer 的讀檔測試

  • SHOW VARIABLES LIKE 'secure_file_priv';
    1. 若為情況一:secure_file_priv = NULL 代表 完全禁止 LOAD DATA INFILE
    2. 若為情況二:secure_file_priv = /var/lib/mysql-files/ 代表 只能從這個目錄讀檔
    3. 結果是情況三:secure_file_priv = (空白) 代表 任何目錄都可以讀,只要權限允許
  • /tmp 的權限表是「drwxrwxrwt」,/var/tmp 的權限表是「drwxrwxrwx」,任何人都可以觸及與建檔。最後的字母「t」代表 sticky bit(黏著位),即使目錄對所有人都有寫入權限,也不能隨便刪除別人的檔案。只有以下三種情況可以刪除檔案:
    1. 檔案擁有者
    2. 目錄擁有者
    3. root
其他使用者即使有 w 權限,也不能刪除。
  • 將 CSV 檔移到 /tmp 之下,任何 OS 帳號均可進入,但不代表這個 CSV 檔 mysql 可以讀取,要再檢查 CSV 檔的權限表。
  • 如果 CSV 檔可以讀取, adminer 就可以成功執行
    LOAD DATA INFILE '/tmp/某.csv' INTO TABLE 某表 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (欄名,…);

用 mysqlimport 資料匯入 CSV

用 mysqlimport 匯入 csv,會更快,但是 mysqlimp 會把檔名當作資料表名。

  • 登入 DS720+ ,以「sudo -i」取得 root 的操作權限
  • 從 DS218+ 將 CSV 檔帶入 DS720+
    scp -rp adminNas@192.168.4.2:/volume1/Data/2025post/檔名.csv /tmp
    => 回答 adminNas 在 192.168.4.2 中的密碼
  • cp -a /tmp/檔名.csv /tmp/資料表名.csv
/usr/local/mariadb10/bin/mysqlimport --local \
--fields-terminated-by=',' \
--lines-terminated-by='\r\n' \
--ignore-lines=1 \
-u 使用者名 -p 資料庫名 \
/tmp/資料表名.csv
=> 回答使用者密碼
  • 再來下一個 csv
  • 萬一出錯以「truncate table 表格名;」清空資料表。

登入 MySQL 後 用 SQL 指令匯入

  1. PuTTY 登入 NAS
  2. 用 mysql client
  3. 執行 LOAD DATA LOCAL INFILE
  • 登入 MySQL:mysql -u wiki -p 資料庫名稱
  • 使用 SQL 指令:
LOAD DATA LOCAL INFILE '/volume1/web/勞保局投保資料202506.csv'
INTO TABLE `2025勞保`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(`保險證號`,`投保單位名稱`,`保費年月(西元年)`,`投保薪資`,`職災投保薪資`,`行業細類`);