링크 ux 에서 ssh 원 격 실행 명령 을 사용 하여 데이터 베 이 스 를 로 컬 로 일괄 내 보 냅 니 다.
6448 단어 ssh원 격 실행 명령데이터베이스 일괄 내 보 내기
사후에 생각해 보 니 대본 을 쓰 는 것 이 좋 겠 다.그렇지 않 으 면 앞으로 도 함정 에 빠 질 것 이다.
환경 적 으로 데이터 베 이 스 는 직접 로그 인 할 수 없고 직접 내 보 낼 수 없습니다.그러나 운영 차원 에서 key 를 제공 하여 ssh 를 통 해 원 격 서버 에 로그 인하 여 데 이 터 를 로 컬 로 내 보 낼 수 있 습 니 다.
먼저 ssh 를 키 를 통 해 서버 에 로그 인 하도록 설정 합 니 다.여기 생략...
그리고 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 [email protected] -p 998 "ls"
ssh 인증 키 가 설정 되 어 있 으 면 로그 인 후 현재 디 렉 터 리 에 있 는 파일 을 열거 합 니 다.물론 첫 번 째 로그 인 은 원 격 서버 의 지문 을 저장 하 는 것 을 알려 줍 니 다.데이터 베 이 스 를 내 보 내 려 면 ls 명령 을 데이터 베 이 스 를 내 보 내 는 명령 으로 바 꿔 야 합 니 다.
echo "select * from user;" | mysql xzc_db -uxzc -pxzcpwd
#
mysql xzc_db -uxzc -pxzcpwd -e "select * from user"
위의 두 명령 은 모두 데이터베이스 사용자 xzc,비밀번호 xzcpwd 를 사용 하여 데이터베이스 xzcdb 는 user 표를 출력 합 니 다.기본 로 컬 데이터베이스 주소 localhost,기본 포트 를 사용 합 니 다.기본 값 이 아니라면 지정 이 필요 합 니 다.로그 인 OK,인쇄 도 OK,그러면 다음 단 계 는 파일 로 내 보 내 는 것 입 니 다.이것 은 bash 에서 바로 하나>의 일이 다.위의 명령 을 합치 면:
ssh [email protected] -p 998 'echo "select * from user;" | mysql xzc_db -uxzc -pxzcpwd' > user.txt
이렇게 하면 user 시 계 를 로 컬 user.txt 에 가 져 옵 니 다.">user.txt"를'에 넣 으 면 원 격 서버 에서 실 행 됩 니 다.내 보 낸 파일 은 원 격 서버 에 있 습 니 다.파일 도 이제 있 습 니 다.txt 에 불과 합 니 다.이렇게 운영 에 맡 기 는 것 은 좋 지 않 습 니 다.그럼 엑셀 내 보 내.그러나 안 타 깝 게 도 저 는 N 다 중 자 료 를 찾 았 고 my sql 은 제3자 플러그 인 이나 도구 에 의존 하지 않 고 원생 엑셀 을 내 보 내 는 방법 을 찾 지 못 했 습 니 다.navicat 에서 내 보 낸 것 은 진짜 엑셀 입 니 다.notepad+와 같은 텍스트 도구 로 열 면 어 지 럽 고 내 보 낸 파일 은 인 코딩 에 문제 가 없 을 것 입 니 다.다행히 txt 가 tab 로 분할 되면 엑셀 도 알 아 볼 수 있 을 것 이다.그래서 user.txt 를 user.xls 로 바 꾸 면 됩 니 다.그러나 이렇게 하 는 문 제 는 엑셀 이 자신의 방식 대로 내용 을 처리 하 는 것 이다.예 를 들 어 아주 큰 숫자 를 과학 기수법 형식 으로 바 꾸 는 것 이다.이것들 은 모두 수 동 으로 처리 해 야 한다.마지막 으로 스 크 립 트 로 대량 작업 을 했 습 니 다.내 가 사용 하 는 스 크 립 트 하 나 를 추가 합 니 다:
#!/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_PATH
cat 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 $port
done
현재 디 렉 터 리 에 있 는 파일 은 다음 과 같 습 니 다.그 중에서 SERVERS 는 서버 목록 입 니 다.데이터베이스 이름,ip,ss 포트,SQLS 는 sql 명령 과 내 보 낼 파일 이름 을 지정 합 니 다.이 두 파일 에 서 는\#로 시작 하 는 것 을 처리 하지 않 습 니 다.
xzc@xzc-HP-ProBook-4446s:~/ /remote_cmd$ ls
remote_cmd.sh SERVERS SQLS
xzc@xzc-HP-ProBook-4446s:~/ /remote_cmd$ cat SERVERS
xzc_game_s99 120.0.0.99 6162
xzc_game_s91 120.0.0.91 6162
xzc_game_s92 120.0.0.92 6162
xzc_game_s93 120.0.0.93 6162
xzc_game_s94 120.0.0.94 6162
#xzc_game_s91 120.0.0.91 6162
xzc@xzc-HP-ProBook-4446s:~/ /remote_cmd$ cat SQLS
#select * money from money; money.xls
select * from user; user.xls
xzc@xzc-HP-ProBook-4446s:~/ /remote_cmd$
여기까지 스 크 립 트 는 기본적으로 요 구 를 완성 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SSH 키 쌍이 손실된 경우 EC2 인스턴스에 대한 SSH 연결 복원얼마 전에 안타깝게도 중요한 EC2 인스턴스에 속한 SSH 키 쌍을 잃어버렸습니다. 그 시점에서 우리는 방금 인스턴스의 스냅샷을 찍고 새 키 쌍으로 새 인스턴스를 생성했습니다. 이 블로그 게시물에서는 SSH 연결을 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.