2017-03-24 11 views
1

私たちは完全に動作しているスクリプトを持っており、サーバAからサーバBへと膨大なデータベースをコピーしています。テーブル名を変数にするだけでスクリプトはテーブル名を要求し、テーブルをAからBにコピーする必要があります。 これは私が作成したスクリプトです。シェルスクリプトではあまり経験はありません。サーバAからサーバBへのテーブルのコピー

#!/bin/sh 

#Run on Server A 
TABLENAME=$1 

echo $TABLENAME 

_now=$(date +"%A %d-%m-%Y "at" %T") 

#Copy table $TABLENAME from server A to server B 
#Dump table into /directory server A 
mysqldump -u admin -p'*****' database_name $TABLENAME >    /directory/$TABLENAME.sql 
# Copie table to server B 
scp /directory/$TABLENAME.sql [email protected]_b.domain.com:/directory/ 
# Replace table in database on server B 
ssh [email protected]_b.domain.com "mysql -f -u admin -p'******' database_name -e  'source /directory/$TABLENAME.sql'" 
#Remove file on server B 
ssh [email protected]_b.domain.com "rm /directory/$TABLENAME.sql" 
#Remove file on A 
rm /directory/$TABLENAME.sql 

これは私が取得エラーです:

.sql                                                         
./script_file_name: line 19: unexpected EOF while looking for matching `"' 
./script_file_name: line 22: syntax error: unexpected end of file 

あなたはコマンドの一部として引用符(」、 ")不足しているあなたに

答えて

1

これは私の問題の解決策です: 1.私は2ドルを 'fds \ $ fds \ $ gfds \ $'のようにエスケープする必要があるmysqlパスワードに持っていましたこの前に。 2.スクリプトはテーブル名を要求しませんが、実行コマンドの後にテーブル名を入力する必要があります。 ./filename table_name

1

に感謝

ssh [email protected]_b.domain.com "mysql -f -u admin -p'******' database_name -e  'source /directory/$TABLENAME'" 
+0

私は引用符を追加した今では、すべてのデータベースをコピーしようとすると、あなたの提案のためのテーブル名 – papacico

1

してみてください。これは、あなたの結合されたsshとmysqlのステートメントとして:

ssh [email protected]_b.domain.com "mysql -h localhost -u admin -p'******' database_name -e 'source /directory/$TABLENAME'" 
  • -hとデータベースホストが追加されました。
  • -fスイッチを削除しました。

どうしたらいいか教えてください。

+1

HI個TXSを要求していない、これは助けない我々はまた、それを使用するように、MySQLの文はokです他のスクリプトもうまく動作します。スクリプトは最初にtablenameを尋ねるべきですが、 – papacico

+0

こんにちは@papacicoです。コマンドラインから(スクリプトの起動後に)何かを読みたい場合は、読み込んだシェル組み込み関数を使用してください。例:「TABLENAMEを読んでください」 。 – PdC

+0

こんにちは@PCD、あなたの提案のためのtxs私は試みたが、おそらく私はこの '読んで'知らないので、何か間違っています。あなたは例としてコード行を書くだけですか?ありがとうございます – papacico

1

次の解決策私のために。

変更されたディレクトリ名を除いて、これは同じ原則と問題解決です。

希望すると便利です。

#!/bin/sh 

     # Copy table $TABLENAME (passed as argument) 
     # from server A to server B. 

# Run on Server A 
TABLENAME=$1 
echo $TABLENAME 

# Dump table into /root/bash on server A. 
mysqldump -h localhost -u root -p'***' tablename $TABLENAME > /root/bash/$TABLENAME.sql 

# Copy table to server B. 
scp /root/bash/$TABLENAME.sql [email protected]<ip address>:/root/bash/$TABLENAME.sql2 

# Replace table in database on server B 
ssh [email protected]<ip address> "mysql -f -u root -p'***' tablename -e 'source /root/bash/$TABLENAME.sql2'" 

# Remove file on server B. 
ssh [email protected]<ip address> "rm /root/bash/$TABLENAME.sql2" 

# Remove file on A 
rm /root/bash/$TABLENAME.sql