我目前正在編寫備份腳本來登入我的生產伺服器並將最新的 SQL 轉儲拉取到我的臨時伺服器。我在提取 SQL 轉儲時沒有問題,但在將最後一個備份檔案移至臨時資料夾時遇到了問題。
我的備份腳本用戶:mysqlBackupUser
我使用該用戶的主目錄作為該腳本的位置並儲存備份。資料夾結構為:
/home
|- mysqlBackupUser
|- .ssh
|- backups
|- bin
我的腳本位於其中bin
,備份被下載到backups
目錄中
該backups
目錄還包含其他資料夾來組織伺服器和備份類型。 IE:
/backups
|-mysql
|- production1
|- production2
|-misc
|- production1
|- production2
到目前為止,一切都很好並且按預期工作。問題是當我處於(不限於):
/home/mysqlBackupUser/backups/mysql/production1/
當我建立名為 tmp 的目錄_lastBackUp
並嘗試將先前的備份移入其中時,我得到:
find: Failed to change directory: Permission denied
我的程式碼是:
local tmpBackUpDir="${LOCAL_LOCATION_DIR}/_lastBackUp/"
# Ensure the directory exist
mkdir -p "${tmpBackUpDir}"
# move any previous files to bak
find "${LOCAL_LOCATION_DIR}/" -type f -exec mv -t "${LOCAL_BAKUP_DIR}" {} \+;;
為了清楚起見:
LOCAL_LOCATION_DIR = /home/mysqlBackupUser/backups/mysql/production1
tmpBackUpDir = /home/mysqlBackupUser/backups/mysql/production1/_lastBackUp/
要了解腳本的使用方式:目前我是我的用戶,我是
sudo su mysqlBackupUser
作為用戶。我不確定這是否是問題所在,而且我無法透過以該使用者身分登入來進行測試。該腳本將由 cron 運行,並將充當該用戶(設定密鑰是為了簡化該用戶的自動化)來執行該過程,因此我不確定這確實是問題所在。
我已經驗證了所有資料夾的所有權和權限,甚至_lastBackUp
是mysqlBackupUser
.我什至設置_lastBackUp
為 777 進行測試,但仍然被拒絕權限...
我的完整錯誤是:
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: Failed to change directory: Permission denied
find: failed to restore initial working directory: Permission denied
每個都find: Failed to change directory: Permission denied
針對我嘗試移動到的每個文件_lastBackUp
感謝您對此有任何見解。
答案1
看起來錯誤是關於沒有權限改變目錄。
- 驗證使用者至少擁有
r-x
通往執行腳本的路徑的每個資料夾。 - 驗證使用者至少擁有
rwx
備份所在的資料夾+檔案。 - 驗證使用者是否有登入 shell,
$HOME
並且$PATH
.如果是,請cd
在開始操作之前將腳本放置到某個相關位置。如果沒有,請使用定義所有命令和位置絕對路徑。
我想不出其他可能的原因。
答案2
如果 mkdir 正在工作(看起來是這樣),如果您在父目錄上執行 ls -al ,誰是目錄的擁有者?在我看來,某些地方的權限出了問題。