将表从服务器A复制到服务器B.

时间:2017-03-24 08:43:17

标签: mysql bash shell

我们有一个完美运行的脚本,我们使用它将一个巨大的数据库从服务器A复制到服务器B.现在我想只将一个表从服务器A复制到服务器B,将表名作为变量,这样脚本应该只询问表名并将表从A复制到B. 这是我制作的剧本,我必须承认我在shell脚本方面不是很有经验。

#!/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 root@server_b.domain.com:/directory/
# Replace table in database on server B
ssh root@server_b.domain.com "mysql -f -u admin -p'******' database_name -e     'source /directory/$TABLENAME.sql'"  
#Remove file on server B
ssh root@server_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

谢谢

4 个答案:

答案 0 :(得分:1)

作为命令的一部分,您缺少引号(",')。

ssh root@server_b.domain.com "mysql -f -u admin -p'******' database_name -e     'source /directory/$TABLENAME'"

答案 1 :(得分:1)

尝试将此作为组合的ssh和mysql语句:

ssh root@server_b.domain.com "mysql -h localhost -u admin -p'******' database_name -e 'source /directory/$TABLENAME'"
  • 添加-h和数据库主机。
  • 删除-f开关。

让我知道它是怎么回事。

答案 2 :(得分:1)

抱歉打扰了你,这是我的问题的解决方案:  1.我的mysql密码需要2美元,需要像#fds \ $ fds \ $ gfds \ $'我以前不知道这个。  2.脚本不会要求输入表名,但必须在运行命令之后输入表名作为参数,如下所示:     ./filename table_name

答案 3 :(得分: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 root@<ip address>:/root/bash/$TABLENAME.sql2

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

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

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