Shell 本身無資料庫連線能力,必須透過 MySQL 客戶端程式 mysql 執行 SQL。前提:機器已安裝 MySQL 客戶端工具。
mysql -h<host> -P<port> -u<user> -p<password> <database> -e "<SQL語句>"
#!/bin/sh
# 設定區
BIN="/usr/local/mysql/bin"
USERNAME="root"
PASSWORD="" # 空密碼時不加 -p 參數
HOSTNAME="localhost"
PORT="3306"
DATABASE="loongdisk"
TABLE="userio"
# 密碼參數處理
if [ "$PASSWORD" = "" ]; then
INPUT_PWD=""
else
INPUT_PWD="-p$PASSWORD"
fi
# 動態生成資料表名(按月分表)
YEAR=$(date +%Y)
MONTH=$(date +%m)
HEAD="${DATABASE}.${TABLE}_${YEAR}${MONTH}"
# 要執行的 SQL:新增 login 欄位
SQL="ALTER TABLE $HEAD ADD COLUMN login INT(10) UNSIGNED NOT NULL DEFAULT 0"
# 執行
$BIN/mysql -h$HOSTNAME -P$PORT -u$USERNAME $INPUT_PWD $DATABASE -e "$SQL"
-p(會等待標準輸入),需條件判斷$? 回傳碼,失敗時記錄日誌並告警mysql ... < file.sql 執行,避免命令列長度限制crontab