使用expect和mysqldump備份
expect
expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預。
例如,執行shell腳本的過程中,需要輸入用戶名、密碼等,可使用expect來完成自動輸入。
安裝expect
yum install tcl
yum install expect
腳本
shell腳本
#! /bin/bash
currentTime=`date +%s`
sql="/home/cg/backup/myblog_$currentTime.sql"
/usr/lnmp/mysql-5.7.16/bin/mysqldump -umysql -p myblog>$sql
使用了expect的shell腳本
#! /usr/bin/expect
set timeout 10
set password [lindex $argv 0]
spawn /home/cg/shell/backup_database.sh
expect "Enter password:"
send "$password\r"
expect eof
定時執行
執行命令
crontab -e
然后輸入:
* * * * 1 /home/cg/shell/backup_database 1234567 >> home/cg/shell/backup.log
錯誤集
mysqldump: Got error: 1049: Unknown database 'blog;'
錯誤:
mysqldump: Got error: 1049: Unknown database 'blog;' when selecting the database
解決辦法:
1.若在windows命令行下,mysqldump備份命令后不能有分號“;”。
2.在expect腳本中,spawn不能識別shell命令“輸出重定向”符號,因此要把mysqldump命令寫到其他shell腳本文件
中,然后在expect腳本中調用該shell腳本。示范代碼:
spawn /home/cg/shell/backup_database.sh
