mysql - 预计脚本 : remote database backup automation

标签 mysql expect

我正在寻找一种远程数据库备份自动化。 然后,我遇到了一种常用于管理任务的脚本语言,“Expect scripting”,我相信它可以很好地满足我的目的。

我想要做的是我想使用本地 Linux 机器上的以下 bash 脚本登录到远程服务器。 (假设一切都已正确设置,通过生成的 key 对进行 SSH 身份验证,因此不需要密码) 对于最重要的部分,我想发送一个 mysqldump 命令来对该服务器上的数据库执行备份。

#!/usr/bin/expect

set login "root"
set addr "192.168.1.1"

spawn ssh $login@$addr
expect "#"
send "cd /tmp\r"
expect "#"
send "mysqldump -u root -ppassword my_database > my_database.sql\r"
expect "#"
send "exit\r" 

我在这里发现的唯一问题是在发送“mysqldump -u root.......”行之后。 它从不等到进程完成,而是立即使用“发送“exit\r””命令行退出 shell。

我该怎么做才能让它等到 mysqldump 命令完成并正确注销 SSH?

最佳答案

我不知道您的问题的答案:将 exp_internal 1 添加到程序顶部以查看发生了什么。

但是,由于您已经设置了 ssh key ,因此您根本不需要期望:

ssh $login@$addr 'cd /tmp && mysqldump -u root -ppassword my_database > my_database.sql'

关于mysql - 预计脚本 : remote database backup automation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18053807/

相关文章:

tcl - tcl/expect 中的正则表达式

linux - 抑制期望输出

perl - rsh 与 Perl 的 Expect.pm 相比有何优势?

mysql - 我正在尝试在数据库中插入数据.csv 文件,它会将标题显示为列记录吗?

mysql - 从 MyISAM 更改为 InnoDB 时是否有任何陷阱/您需要知道的事情

centos - docker centos6.6容器上的autoexpect无法工作

linux - 期望 ping 脚本跳过发送步骤

mysql - 解释命令用法

php - MySQL 语句在 while 中不回显变量

mysql - 选择金额最高的记录