不登陸數據庫執行mysql命令小結
(本文適合有一定mysql數據庫經驗的讀者)
#########################################################
█1.通過echo實現(這個比較常見)
echo "show databases;" | mysql -uroot -p'oldboy' -S /data/3308/mysql.sock
提示:此法適合單行字符串比較少的情況。
█2.通過cat實現(此法用的不多)
cat |mysql -uroot -p'oldboy' -S /data/3308/mysql.sock << EOF
show databases;
EOF
提示:此法適合多行字符串比較多的時候。
█3.通過mysql -e參數實現
mysql -u root -p'oldboy' -S /data1/3307/mysql.sock -e "show databases;"
█ 特殊生產場景應用:
例一:mysql自動批量制作主從同步需要的語句。
cat |mysql -uroot -p'oldboy' -S /data/3308/mysql.sock<< EOF
CHANGE MASTER TO
MASTER_HOST='10.0.0.16',
MASTER_PORT=3306,
MASTER_USER='oldboyrep',
MASTER_PASSWORD='oldboyrep',
MASTER_LOG_FILE='mysql-bin.000025'
MASTER_LOG_POS=4269;
EOF
提示:大家多注意整個語句的寫法,而不是cat中的內容。
例二:mysql線程中,“大海撈針”
平時登陸數據庫show processlist;,發現結果經常超長,找自己要看的的比較困難,而且,
SQL顯示不全。如果直接執行show full processlist那更是瞬間滾了N屏。找到有問題的
SQL語句非常困難。
現在好了,老男給你們推薦如下語句。
mysql -u root -p'oldboy' -S /data1/3307/mysql.sock -e "show full processlist;"|grep -v Sleep
過濾當前執行的SQL語句完整內容,這條命令很有用。不知道你能否體會到。後面還可以加iconv等對中文轉碼,
根據需求過濾想要的內容,此命令屢試不爽啊。
本文出自 “老男孩的linux博客” 博客