下面的脚本的目的是ssh连接远程服务器,执行dump命令,将数据库dump为sql文件,并且压缩为zip文件。
echo ' dump 数据 并 zip '
/usr/bin/expect << eof
spawn ssh root@xxx.xxx.xxx.xxx
expect "root@*" {send "mysqldump -uuser -h localhost -ppwd db_name > /db_name.sql \r"}
expect "root@*" {send "zip db_dump_file.zip db_name.sql \r"}
expect "root@*" {send "exit \r"}
eof
echo done!
输出结果为:
[root@localhost ~]# mysqldump -uuser -h localhost -ppwd db_name > /db_name.sql
Warning: Using a password on the command line interface can be insecure.
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
结果是mysqldump命令执行了,但是zip命令未能执行。从输出来看dump命令输出了一个warning和一个error我尝试将脚本修改为如下内容(添加了两行Warning、mysqldump的expect)但是未能解决问题。
echo ' dump 数据 并 zip '
/usr/bin/expect << eof
spawn ssh root@xxx.xxx.xxx.xxx
expect "root@*" {send "mysqldump -uuser -h localhost -ppwd db_name > /db_name.sql \r"}
expect "Warning*" {send " "}
expect "mysqldump*" {send " "}
expect "root@*" {send "zip db_dump_file.zip db_name.sql \r"}
expect "root@*" {send "exit \r"}
eof
echo done!
请问为何压缩命令没有执行呢?
已解决问题。
修改后如下: