亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

linux下使用ssh遠程執行命令批量導出數據庫到本地

2020-07-27 19:07:22
字體:
來源:轉載
供稿:網友

前天正在跟前端的同事調試功能。服務器開好,模擬的玩家登錄好,就在倒計時。這時突然運營的同事跑過來說要統計幾個服務器玩家的一些情況,也就是需要從幾個服的數據庫導出部分玩家的數據。好吧,我看了一下時間,11:47。心想,跟前端調試完,去吃個飯再午休一下那就下午再給吧。沒想對方來一句"就導個數據庫而已,要這么久么?",而且還是直接跟我上司說的。我嚓,好吧,我導??蓡栴}來了,平時的統計是由php做的,批量部署這些是由運維做的。服務端完全沒有對應的工具。而且服務器是在阿里云上的,數據庫的用戶是限制了ip段登錄的,我所在的ip沒法登錄的。于是,只好終止調試,切ip,寫sql,然后用navicat手動一個個服務器導出數據到excel。

  事后想想,還是寫個腳本吧,不然以后還是會被坑的。
  從環境來看,數據庫不能直接登錄,沒法直接導出。不過可以由運維提供key通過ssh登錄到遠程服務器再將數據導出到本地。
  先配置ssh通過key登錄服務器。這里略過...

  然后就是通過ssh執行命令。先看一下ssh的幫助文檔:

usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]      [-D [bind_address:]port] [-E log_file] [-e escape_char]      [-F configfile] [-I pkcs11] [-i identity_file]      [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]      [-O ctl_cmd] [-o option] [-p port]      [-Q cipher | cipher-auth | mac | kex | key]      [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]      [-w local_tun[:remote_tun]] [user@]hostname [command]

最后一項就是執行指令的。假如遠程服務器地址為180.97.33.108,開啟的ssh端口為998,ssh用戶名為xzc,然后想通過在遠程服務器上執行命令ls,那么腳本應該這么寫:

復制代碼 代碼如下:

ssh xzc@180.97.33.108 -p 998 "ls"

如果ssh的認證key已配置好,那么會把登錄后當前目錄下的文件列出來,當然第一次登錄會提示保存遠程服務器的指紋?,F在是要導出數據庫的數據,那么需要把ls命令換成導出數據庫的命令。

復制代碼 代碼如下:

echo "select * from user;" | mysql xzc_db -uxzc -pxzcpwd
#或者
mysql xzc_db -uxzc -pxzcpwd -e "select * from user"

上面兩命令都可以使用數據庫用戶xzc,密碼xzcpwd從數據庫xzc_db打印出user表,使用的是默認的本地數據庫地址localhost,默認的端口。如果不是默認,需要指定。

   登錄OK了,打印也OK了,那么下一步就是導出到文件了。這在bash也就是一個 > 的事。把上面的命令拼起來就是:

復制代碼 代碼如下:

ssh xzc@180.97.33.108 -p 998 'echo "select * from user;" | mysql xzc_db -uxzc -pxzcpwd' > user.txt

這樣就把user表導出來本地的user.txt中了。注意"> user.txt"如果放到 ''里則是在遠程服務器執行,導出的文件在遠程服務器。文件現在也有了,不過是txt,這樣交給運營不太好吧。那就導出excel吧。不過遺憾的是我查了N多資料,也找不到mysql不依賴第三方插件或工具導出原生excel的方法。而navicat導出的可是貨真價實的excel,如果用notepad++之類的文本工具打開是會亂碼的,并且導出的文件不會有編碼問題。幸好如果一個txt以tab分割的話,excel也是能認得出來的。于是把user.txt改名user.xls就可以了。但這樣做的問題是excel會按自己的方式處理內容的。比如把一個很大的數字轉換成科學記數法形式。這些都得手動去處理一下了。

  最后,就是寫成腳本批量操作了。附上我使用的腳本一個:

#!/bin/bash# 通過ssh遠程執行遠程指令# 需要先部署key認證,保證ssh只需要ip、port即可連接# 如果需要和遠程服務器交互,請參考ssh的-t、-tt參數# 如果需要反復登錄服務器執行多條指令,請使用ssh的通道重用# 參考:http://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing# 使用通道需要注意退出通道,如"ssh github.com -O exit"或者"ssh github.com -O stop"#                       --by coding my life#分別設置ssh用戶名、數據庫用戶名、數據庫密碼、導出數據SSH_USER='xzc_ssh'DB_USER='xzc_db'DB_PWD='xzc_db_pwd123'EXP_PATH=export_data/# 執行遠程命令# $1 服務器ip# $2 ssh端口# $3 指令function exec_remote_command(){  ssh $SSH_USER@$1 -p $2 '$3'}# 執行遠程sql,導出數據# $1 服務器ip# $2 ssh端口# $3 指令,多個sql指令如select * from user;select * from bag;也可執行,但結果將會寫到同一個文件# s4 服務器# $5 導出文件function export_remote_sql(){  echo export from $4 ...  cmd="echo /"$3/" | mysql $4 -u$DB_USER -p$DB_PWD --default-character-set=utf8"  ssh $SSH_USER@$1 -p $2 "$cmd" > $EXP_PATH$4_$5  #如果要導出到遠程服務器,將把 > $EXP_PATH$4_$5放到cmd中}# $1 區服名# $2 ip# $3 端口function exec_sqls(){  cat SQLS | while read sql ; do      fc=${sql:0:1}    if [ "#" == "$fc" ]; then  #被注釋的不處理      continue    fi    #sql語句中包含空格,不能再以空格來區分。最后一個空格后的是導出的文件名    exp_file="${sql##* }"        #兩個#表示正則以最大長度匹配*和一個空格(*后面的空格),截取余下的賦值給exp_file    sql_cmd="${sql%% $exp_file}"     #兩個%表示從右至左刪除%%以后的內容        export_remote_sql $2 $3 "$sql_cmd" $1 "$exp_file"  done}# 需要在當前目錄下創建服務器列表文件SERVERS,格式為"數據庫名 ip ssh端口",如"xzc_game_s99 127.0.0.1 22"# 需要在當前目錄下創建sql命令列表文件SQLS,格式為"sql語句 導出的文件",如"select * from user; user.xls"# 多個sql請注意用;分開,sql必須以;結束# 文件名中不能包含空格,最終導出的文件為"數據庫名_文件名",如"xzc_game_s99_user.xls"mkdir -p $EXP_PATHcat SERVERS | while read server ; do  fc=${server:0:1}  if [ "#" == "$fc" ]; then  #被注釋的不處理    continue  fi  name=`echo $server|awk '{print $1}'`  ip=`echo $server|awk '{print $2}'`  port=`echo $server|awk '{print $3}'`  exec_sqls $name $ip $portdone

當前目錄下的文件如下,其中SERVERS是服務器列表,里面指定數據庫名,ip,ss端口,SQLS則指定sql指令及導出的文件名。這兩個文件里以#開頭的都不會處理:

xzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$ lsremote_cmd.sh SERVERS SQLSxzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$ cat SERVERS xzc_game_s99 120.0.0.99 6162xzc_game_s91 120.0.0.91 6162xzc_game_s92 120.0.0.92 6162xzc_game_s93 120.0.0.93 6162xzc_game_s94 120.0.0.94 6162#xzc_game_s91 120.0.0.91 6162xzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$ cat SQLS #select * money from money; money.xlsselect * from user; user.xlsxzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$

到這里,腳本基本完成了要求。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
另类视频在线观看| 久久综合免费视频影院| 国产成人精品免费久久久久| 成人免费激情视频| 久久久久久久久久av| 97免费在线视频| 久久久久久国产精品| 亚洲日韩中文字幕在线播放| 亚洲欧洲中文天堂| 国产精品成人播放| 97国产精品免费视频| 综合国产在线观看| 亚洲性生活视频| 亚洲午夜激情免费视频| 欧美最近摘花xxxx摘花| 性色av一区二区三区免费| 91久久久国产精品| 青草青草久热精品视频在线网站| 国产成人免费av电影| 日韩在线免费观看视频| 欧美大片免费观看| 亚洲精品久久久久久下一站| 成人黄色免费片| 亚洲a级在线观看| 亚洲色图在线观看| 日韩精品免费在线视频| 久久久免费在线观看| 国产精品免费久久久久久| 亚洲一区二区三区视频播放| 668精品在线视频| 国产精品∨欧美精品v日韩精品| 91久久久久久久一区二区| 亚洲国产精品va在线看黑人| 久久五月天色综合| 亚洲人成电影在线观看天堂色| 欧美色道久久88综合亚洲精品| 国产精品第2页| 欧美中文在线字幕| 精品久久久在线观看| 国产精品96久久久久久| 欧美成人黑人xx视频免费观看| 国产99视频在线观看| 亚洲国产成人av在线| www.欧美免费| 亚洲精品欧美日韩| 欧美电影在线播放| 亚洲女人天堂成人av在线| 久久综合伊人77777尤物| 日韩美女福利视频| 国产亚洲精品美女久久久| 欧美成人激情在线| 亚洲网在线观看| 狠狠躁天天躁日日躁欧美| 亚洲黄色在线观看| 亚洲一区久久久| 日韩视频免费观看| 国产综合在线观看视频| 亚洲精品成人免费| 国产欧美精品在线播放| 亚洲级视频在线观看免费1级| 国产免费一区二区三区香蕉精| 最近2019中文字幕第三页视频| zzijzzij亚洲日本成熟少妇| 亚洲电影免费在线观看| 亚洲成色999久久网站| 国产视频久久久| 97精品视频在线| 国产日韩欧美成人| 欧美亚洲国产精品| 欧美精品日韩三级| 中文字幕欧美精品日韩中文字幕| 国产视频精品在线| 国产精品av在线| 91在线观看免费高清完整版在线观看| 久久免费少妇高潮久久精品99| 国产精品自产拍在线观| 亚洲精品日韩欧美| 日本精品视频在线观看| 色偷偷综合社区| 91久久精品美女高潮| 国产欧美 在线欧美| 久久天天躁夜夜躁狠狠躁2022| 91亚洲国产成人精品性色| 性欧美办公室18xxxxhd| 91精品国产91久久久久福利| 亚洲成人中文字幕| 日韩av免费一区| 欧美性jizz18性欧美| 日韩二区三区在线| 亚洲系列中文字幕| 久久中文久久字幕| 国产精品老牛影院在线观看| 欧美大全免费观看电视剧大泉洋| 欧美日韩美女视频| 亚洲国产精久久久久久久| 日韩在线播放一区| 97av视频在线| 亚洲第一精品夜夜躁人人躁| 欧美亚洲国产精品| 欧美激情一级二级| 成人免费福利视频| 91精品91久久久久久| 欧美性生交大片免网| 亚洲第一中文字幕| 国产精品视频资源| 国产精品久久久久91| 亚洲码在线观看| 在线成人一区二区| 国产精品偷伦视频免费观看国产| 欧美极度另类性三渗透| 国产精品永久免费视频| 91沈先生在线观看| 九九精品在线观看| 久久久久日韩精品久久久男男| 久久精品亚洲94久久精品| 亚洲性线免费观看视频成熟| 日韩免费观看av| 欧美丰满老妇厨房牲生活| 日本成熟性欧美| 国产一区二区免费| 亚洲成年人影院在线| 国产精欧美一区二区三区| 亚洲欧美日韩精品久久亚洲区| 日韩精品中文在线观看| 欧美激情在线播放| 全色精品综合影院| 日本午夜精品理论片a级appf发布| 亚洲一区二区免费| 欧美理论电影在线观看| 久久久中精品2020中文| 欧美大胆在线视频| 久久久久久久亚洲精品| 欧美激情视频一区| 视频在线观看99| 欧美日韩xxxxx| 午夜欧美不卡精品aaaaa| 欧美大片大片在线播放| 亚洲精品视频免费| 亚洲qvod图片区电影| 亚洲欧美日韩网| 粗暴蹂躏中文一区二区三区| 国产精品三级久久久久久电影| 日韩欧美中文字幕在线观看| 精品国产91乱高清在线观看| 中文在线资源观看视频网站免费不卡| 国产精品美女久久久久久免费| 欧美精品videos| 国产精品a久久久久久| 日韩中文在线视频| 精品激情国产视频| 91人人爽人人爽人人精88v| 亚洲国产欧美在线成人app| 综合网中文字幕| 亚洲久久久久久久久久久| 欧美大秀在线观看| 欧美成人一二三| 日韩av综合中文字幕| 国产偷亚洲偷欧美偷精品| 日韩激情av在线免费观看| 国产一区二区三区日韩欧美| 国产欧美婷婷中文| 国产成人一区二区在线| 国产亚洲精品美女| 久久99精品国产99久久6尤物|