1.需要借助expect这个软件,expect是在tcl的基础上建立的,所以在安装expect之前需要安装tcl
为了防止装的东西过于散乱,在root下新建一个文件夹tools
安装TCL
下载地址:http://www.tcl.tk/software/tcltk/download.html
[root@test ~]# cd /tools/
[root@test tools]# wget http://prdownloads.sourceforge.net/tcl/tcl8.5.19-src.tar.gz
[root@test tools]# tar xf tcl8.5.19-src.tar.gz
[root@test tools]# cd tcl8.5.19/unix/
[root@test unix]#./configure
这一步可能会报错,需要安装gcc库,所以先:yum install -y gcc
安装完了再:./configure
[root@test unix]# make
[root@test unix]# makeinstall
[root@test unix]# cd
安装expect
官网:http://expect.sourceforge.net/
[root@test ~]# cd /tools/
[root@test tools]# wget http://nchc.dl.sourceforge.net/project/expect/Expect/5.45/expect5.45.tar.gz
[root@test tools]# tar xf expect5.45.tar.gz
[root@test tools]# cd expect5.45
[root@test expect5.45]#./configure --with-tcl=/usr/local/lib/ --with-tclinclude=/root/
tools/tcl8.5.19/generic/
[root@test expect5.45]# make
[root@test expect5.45]# make install
[root@test expect5.45]# cd
[root@mysql-master ~]# which expect
/usr/local/bin/expect
到这里,expect则安装完毕。
安装完了之后,先测试自动备份命令,目的是先把一对一公钥保存下来,以免在定时任务出现异常:
我是进入到home下,执行的以下命令:
scp xxxxxxxxxxx.gz root@测试服务器的ip:/home/from_other_server.gz
出现yes/no,选择yes,输入密码,回车。这样顺利的话就是已经把数据库备份到别的服务器上面了。
在/usr/sbin下新建一个scp.exp文件,里面加上代码:
#! /usr/local/bin/expect
# FileName:scp.exp
set timeout 60
if { [llength $argv] < 2} {
puts "Usage:"
puts "$argv0 local_file remote_path"
exit 1
}
set local_file [lindex $argv 0]
set remote_path [lindex $argv 1]
set passwd "xxxxxx" #这里的内容主要是备注,在正式文件中要记得删掉,这 个password是备份服务器的服务器密码
set passwderror 0
spawn scp $local_file $remote_path
expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd "
exp_continue
}
"*es/no)?*" {
send "yes "
exp_continue
}
timeout {
puts "connect is timeout"
exit 3
}
}
文件的格式要是unix
然后在新建一个sh脚本文件,里面的内容为:
#! /bin/bash
# FileName:bakdb.sh
# this is a ShellScript for auto db backup
#
DB_NAME="test_server" #要备份的数据库名
DB_USER="root" #生产服务器的数据库用户名
DB_PASS="xxxxxxx" #生产服务器的数据库密码
# Others vars
BIN_DIR="~"
BCK_DIR="/home/"
DATE=`date +%F`
TARGETPATH="/home/" #备份服务器要放的数据库备份文件的地址
TARGETSERVERIP="xxxxx" #备份服务器的ip
TARGETSERVERUSER="xxxxx" #备份服务器的用户名
# TODO
#$BIN_DIR/
mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip >$BCK_DIR/db_$DATE.gz
/usr/sbin/scp.exp $BCK_DIR/db_$DATE.gz $TARGETSERVERUSER@$TARGETSERVERIP:$TARGETPATH/$DB_NAME$DATE.gz