「公保與勞保資料匯入」修訂間的差異
跳至導覽
跳至搜尋
| (未顯示同一使用者於中間所作的 14 次修訂) | |||
| 行 6: | 行 6: | ||
| − | === | + | ===DS720+ 的 adminer 的讀檔測試=== |
| − | adminer | + | * SHOW VARIABLES LIKE 'secure_file_priv'; |
| + | *#若為情況一:secure_file_priv = NULL 代表 '''完全禁止 LOAD DATA INFILE''' | ||
| + | *#若為情況二:secure_file_priv = /var/lib/mysql-files/ 代表 '''只能從這個目錄讀檔''' | ||
| + | *#結果是情況三:secure_file_priv = (空白) 代表 '''任何目錄都可以讀,只要權限允許''' | ||
| + | * /tmp 的權限表是「drwxrwxrwt」,/var/tmp 的權限表是「drwxrwxrwx」,任何人都可以觸及與建檔。最後的字母「t」代表 sticky bit(黏著位),'''即使目錄對所有人都有寫入權限,也不能隨便刪除別人的檔案'''。只有以下三種情況可以刪除檔案: | ||
| + | *#檔案擁有者 | ||
| + | *#目錄擁有者 | ||
| + | *#root | ||
| + | :其他使用者即使有 w 權限,也不能刪除。 | ||
| + | * 將 CSV 檔移到 /tmp 之下,任何 OS 帳號均可進入,但不代表這個 CSV 檔 mysql 可以讀取,要再檢查 CSV 檔的權限表。 | ||
| + | * 如果 CSV 檔可以讀取, adminer 就可以成功執行<pre>LOAD DATA INFILE '/tmp/某.csv' INTO TABLE 某表 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (欄名,…);</pre> | ||
| + | ===用 mysqlimport 資料匯入 CSV=== | ||
| + | 用 mysqlimport 匯入 csv,會更快,但是 mysqlimp 會把檔名當作資料表名。 | ||
| + | <!--限區網中操作 ssh 帳號@192.168.4.4 --> | ||
* 登入 DS720+ ,以「sudo -i」取得 root 的操作權限 | * 登入 DS720+ ,以「sudo -i」取得 root 的操作權限 | ||
* 從 DS218+ 將 CSV 檔帶入 DS720+<pre>scp -rp adminNas@192.168.4.2:/volume1/Data/2025post/檔名.csv /tmp</pre> => 回答 adminNas 在 192.168.4.2 中的密碼 | * 從 DS218+ 將 CSV 檔帶入 DS720+<pre>scp -rp adminNas@192.168.4.2:/volume1/Data/2025post/檔名.csv /tmp</pre> => 回答 adminNas 在 192.168.4.2 中的密碼 | ||
| + | * cp -a /tmp/檔名.csv /tmp/資料表名.csv | ||
* 以 | * 以 | ||
<pre>/usr/local/mariadb10/bin/mysqlimport --local \ | <pre>/usr/local/mariadb10/bin/mysqlimport --local \ | ||
| 行 18: | 行 32: | ||
-u 使用者名 -p 資料庫名 \ | -u 使用者名 -p 資料庫名 \ | ||
/tmp/資料表名.csv</pre> | /tmp/資料表名.csv</pre> | ||
| − | 回答使用者密碼 | + | : => 回答使用者密碼 |
| − | * | + | * 再來下一個 csv |
| + | * 萬一出錯以「truncate table 表格名;」清空資料表。 | ||
| + | |||
| + | ===登入 MySQL 後 用 SQL 指令匯入=== | ||
| + | # PuTTY 登入 NAS | ||
| + | # 用 mysql client | ||
| + | # 執行 LOAD DATA LOCAL INFILE | ||
| + | |||
| + | * 登入 MySQL:mysql -u wiki -p 資料庫名稱 | ||
| + | * 使用 SQL 指令: | ||
| + | <pre>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 | ||
| + | (`保險證號`,`投保單位名稱`,`保費年月(西元年)`,`投保薪資`,`職災投保薪資`,`行業細類`);</pre> | ||
於 2026年3月31日 (二) 11:46 的最新修訂
CSV 資料製備
DS720+ 的 adminer 的讀檔測試
- SHOW VARIABLES LIKE 'secure_file_priv';
- 若為情況一:secure_file_priv = NULL 代表 完全禁止 LOAD DATA INFILE
- 若為情況二:secure_file_priv = /var/lib/mysql-files/ 代表 只能從這個目錄讀檔
- 結果是情況三:secure_file_priv = (空白) 代表 任何目錄都可以讀,只要權限允許
- /tmp 的權限表是「drwxrwxrwt」,/var/tmp 的權限表是「drwxrwxrwx」,任何人都可以觸及與建檔。最後的字母「t」代表 sticky bit(黏著位),即使目錄對所有人都有寫入權限,也不能隨便刪除別人的檔案。只有以下三種情況可以刪除檔案:
- 檔案擁有者
- 目錄擁有者
- 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 指令匯入
- PuTTY 登入 NAS
- 用 mysql client
- 執行 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 (`保險證號`,`投保單位名稱`,`保費年月(西元年)`,`投保薪資`,`職災投保薪資`,`行業細類`);