Mysql
mysql 創建數據庫和使用者腳本
問題改寫:
HOMEDIR="ftpuser" REMOTEIP="1.1.1.1" MYSQLPASS="password" Q1="DROP USER "$HOMEDIR"_shop;" Q2="DROP DATABASE "$HOMEDIR"_shop;" Q3="CREATE DATABASE IF NOT EXISTS "$HOMEDIR"_shop;" Q4="GRANT ALL ON "$HOMEDIR"_shop TO '"$HOMEDIR"_shop'@'localhost' IDENTIFIED BY '$MYSQLPASS';" Q5="GRANT ALL ON "$HOMEDIR"_shop TO '"$HOMEDIR"_shop'@'anotherip' IDENTIFIED BY '$MYSQLPASS';" # Need to grant permissions from another server as well Q6="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}${Q3}${Q4}${Q5}${Q6}" echo $SQL echo " " ssh -p 8899 root@$REMOTEIP "mysql -u root -p "$SQL""
然後我執行:
/root/testing/migratesite.sh
並得到:
bash: DROP: command not found bash: CREATE: command not found bash: GRANT: command not found bash: GRANT: command not found bash: FLUSH: command not found
我錯過了什麼?
您缺少引號和正確的 mysql 客戶端命令行:
ssh -p 8899 root@$REMOTEIP "mysql -u root -p -e \"$SQL\""
您需要對 $SQL 變數周圍的引號進行轉義,以便將它們傳遞給遠端 shell,否則它們會被本地 shell 解釋(這就是你得到 DROP: command not found,分號由 shell 解釋的原因。)此外,要讓 mysql 客戶端執行命令,您必須傳遞 -e 命令行選項。
您已經將 $VARIABLES 括在引號中(這是一種很好的做法,並且考慮了變數/文件名中的空格)但是您在整行中打開和關閉它們 - 這對於 BASH 變數分配來說可以正常工作(儘管不推薦),但是當您進入 SSH 遠端命令,它嘗試執行變數時失敗,而不是您提供的引號括起來的字元串。正確的 SSH 命令是:
ssh -p 8899 根@ $ REMOTEIP “mysql -u root -p $ SQL”
因為變數已經被引號“引用”以傳遞參數。