2023/01/17

[Linux] 相見恨晚 rsync 取代 cp 的複製指令

問題情境

在 Linux Server 傳輸檔案,絕大多數的使用情境是可以直接用有 UI 介面的工具透過 SFTP 傳輸檔案。

但有時會遇到僅有文字介面的遠端操作環境,即先遠端到客戶主機,然後用 SSH 連線到指定的 Server。

以前只會在文字介面下用 cp 複製的指令,但這個指令的問題點在於:

  1. 不會覆蓋已存在的檔案,若要覆蓋需加 -i (interactive),但會一個一個詢問是否要覆蓋。一兩個檔案還沒什麼,當要更新的檔案很多時,操作上有點沒效率。
  2. 若在 root 的權限操作下,會蓋掉原使用者及群組的權限 (這可是大件事啊…)

相見恨晚的 rsync

一直以為 rsync 只是用來同步用,透過跟社群朋友交流,發現它是有更新檔案覆蓋的功效,操作上跟 cp 類似,但是最棒的是可以保留指定使用者及群組權限,還可比對各檔案差異的傳輸狀況。

我目前的操作情境是把差異更新的檔案程式先下載到主機再做更新,所以只會做複製及更新檔案的動作,不做任何刪除檔案的異動。(若遇到真需要刪檔的時候,才再行確認手動刪除)

更新操作動作如下:

rsync -avh /source/update_folder/ /target/project_folder/

常用參數:

  • -v : verbose 模式
  • -r : recursive 遞迴所有子目錄下的目錄及檔案
  • -a : 相當於 -rlptgoD 參數,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記
  • -z : 使用壓縮
  • -h : 將數字以比較容易閱讀的格式輸出

對應 cp 的類似的用法則是

cp -ia /source/update_folder/* /target/project_folder/

透過 rsync 來做檔案更新操作,真的是相見恨晚呀!rsync 還有更多強大的使用情境,待日後慢慢研究啦~

同場加碼 Windows 也可以使用 rsync (工具: cwRsync)

參考資料

2023/01/16

[MySQL] 解決匯入資料時出現 Got a packet bigger than max_allowed_packet bytes 問題

問題

在 MySQL 匯入 *.sql 資料時出現 [Err] 1153 - Got a packet bigger than 'max_allowed_packet' bytes 的錯誤資訊。

解決方法

  1. 修改 MySQL 設定檔案

在 [mysqld] 的設定區塊下加上 max_allowed_packet=100M 即可接受 100MB 以內的檔案 (預設為 16MB)

可依匯入的檔案大小做設定修改,最大值為 1GB,修改後必需重啟 Server 以生效

  1. 不修改設定檔的狀況下,可在 Commandline 加上 --max_allowed_packet 參數設定

例如:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

相關連結