2017-12-22 46 views
0

쉘 스크립트를 사용하여 데이터베이스를 원격 서버에서 내 Synology NAS로 백업하고 있습니다. 스크립트가 잘 작동하지만 'localhost'라는 원격 서버의 mysql config에 바인드 주소를 설정하면 스크립트가 더 이상 작동하지 않습니다. 스크립트에는 SSH 확인이 필요합니다.쉘 스크립트가있는 백업 MySQL 데이터베이스 - 로컬 호스트에 바인드 주소가 설정되었습니다.

질문 :이 스크립트에서 SSH 연결/자격 증명을 만들려면 어떻게해야합니까? 스크립트 밑에

내가 사용

#! /bin/bash 

TIMESTAMP=$(date +"%Y-%m-%d") 
PAST=$(date +"%Y-%m-%d" -d "30 days ago") 
BACKUP_DIR="/volume1/dir/dir2/$TIMESTAMP" 
PAST_DIR="/volume1/dir/di2/$PAST" 
HOST="myip" 
MYSQL_USER="username" 
MYSQL=/usr/bin/mysql 
MYSQL_PASSWORD="password" 
MYSQLDUMP=/usr/bin/mysqldump 


rm -rv $PAST_DIR 

mkdir -p $BACKUP_DIR 

databases=`$MYSQL -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"` 

for db in $databases; do 
    $MYSQLDUMP --force --opt -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.sql.gz" 
done 

답변

0

당신은 ssh하여 명령을 보내야합니다. 스크립트의 수정 된 버전이 작업을 수행해야합니다.

#! /bin/bash 

TIMESTAMP=$(date +"%Y-%m-%d") 
PAST=$(date +"%Y-%m-%d" -d "30 days ago") 
BACKUP_DIR="/volume1/dir/dir2/$TIMESTAMP" 
PAST_DIR="/volume1/dir/di2/$PAST" 
HOST="myip" 
MYSQL_USER="username" 
MYSQL=/usr/bin/mysql 
MYSQL_PASSWORD="password" 
MYSQLDUMP=/usr/bin/mysqldump 

SSH_KEY="" 
SSH_USER="" 
SSH_HOST="" 

REMOTE_COMMAND="$MYSQL -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD -s -e 'SHOW DATABASES' | grep -v 'information_schema'" 
databases=$(ssh -i $SSH_KEY ${SSH_USER}@${SSH_HOST} "$REMOTE_COMMAND") 

created=0 

for db in $databases; do 
    DUMP="$BACKUP_DIR/$db.sql" 

    # To save backup on remote machine 
    case $created in 
    0) REMOTE_COMMAND="rm -rv $PAST_DIR; mkdir -p $BACKUP_DIR"; created=1 
     ssh -i $SSH_KEY ${SSH_USER}@${SSH_HOST} "$REMOTE_COMMAND" ;; 
    *) ;; 
    esac 

    REMOTE_COMMAND="$MYSQLDUMP --force --opt -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip -9 > $DUMP.gz" 
    ssh -i $SSH_KEY ${SSH_USER}@${SSH_HOST} "$REMOTE_COMMAND" 

    # To save backup on local machine 
    # case $created in 
    # 0) rm -rv $PAST_DIR; mkdir -p $BACKUP_DIR; created=1 ;; 
    # *) ;; 
    # esac 
    # REMOTE_COMMAND="$MYSQLDUMP --force --opt -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db" 
    # ssh -i $SSH_KEY ${SSH_USER}@${SSH_HOST} "$REMOTE_COMMAND" | gzip -9 > $DUMP.gz 

done 

참고 : 당신은, SSH_USER, SSH_HOST 변수를 SSH_KEY (당신이 SSH 키를 기반으로 한 경우 인증)을 설정해야합니다. 또한 명령을 시작한 로컬 컴퓨터에서 백업을 저장하려는 경우를 대비해 두 가지 솔루션을 제공했습니다. mysql 명령 (SHOW DATABASES 부분)을 사용하여 -s 플래그를 지정합니다.이 플래그는 열 이름 (여기서는 Database)을 인쇄하지 않습니다.

+0

광범위한 예제에 감사드립니다. 실행 중 오류가 발생합니다 (로컬 저장 옵션 사용). Taak : 데이터베이스 백업 myserver.com Starttijd : 2017년 12월 22일 (금) 그리니치 표준시 14시 12분 15초 Stoptijd : 2017년 12월 22일 (금) 그리니치 표준시 14시 12분 16초 Huidige 상태 : 0 Standaard uitvoer/FOUT : 경고 : 신원 파일/xHAYse7U1JuMJb4Kuu +/nGjQ/rYO8M5fPpnWSb6v2muIUxiJyrC/jIvx3K2ctmx8ROm167rNUxGeh0RiuqN + G + oUv1zXSE3SM7YIP5Z2mK9cfkFxKXMAUcM9pD0YvslfkYG + gEwEbC + ​​rMTVI/SUOBZbd8SfDzbnuS2bwmIlk + NTAP 액세스 할 수 없습니다 : 그런 파일이나 디렉토리. ERROR 2003 (HY000) : 'serverIP'(111)에 MySQL 서버에 연결할 수 없습니다. – dna75

+0

'-i' 플래그로 ssh 키의 전체 경로를 지정 했습니까? 또한 mysql에 사용되는'HOST'는 localhost로 설정 될 수 있습니다. 왜냐하면 원격 컴퓨터에 ssh로 연결하고 mysql을 원격 컴퓨터에서 로컬로 실행하기 때문입니다. 그래서'SSH_HOST'는 당신의 원격 머신이어야하고'HOST'는'localhost'가 될 수 있습니다 (이 예에서는 mysql과 함께 사용됩니다). – marcell

+0

경로 대신 키를 입력했습니다. 경로를 사용할 때 다른 오류가 발생합니다. 경고 : 신원 파일 [email protected]에 액세스 할 수 없습니다. 해당 파일 또는 디렉토리가 없습니다. stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다. ssh : 호스트 이름을 확인할 수 없습니다./usr/bin/mysql -h xx.xxx.xxx.xxx --user = remote -kwnvs1avqin5 -s -e 'show databases'| grep : 이름 또는 서비스를 알 수 없음 – dna75