由于项目要求,必须要写一个定时任务来备份mysql数据库的数据。由于之前的时候从来没有接触过linux脚本命令,所以对我来说就是简直了。没办法,来查吧,查了半天,按照人家说的也写了半天,就是不行。后来找大牛给看了看,原来我和真正的成功就多了一行命令。下面是这次我记录的脚本命令。
进入home目录
cd /home
创建备份文件夹
mkdir mysql_data
进入备份文件夹
cd mysql_data
创建备份脚本文件
touch mysql_databak.sh
修改备份脚本文件内溶
vim mysql_databak.sh
下面是mysql_databak.sh 里面的内容:
#!/bin/sh
DUMP=/usr/local/mysql/bin/mysqldump #这个是我的mysqldump的路径,使用时要根据自己的环境修改;一般在/var/bin下面OUT_DIR=/home/mysql_data #备份文件的目录,没有提前建好
LINUX_USER=root #linux用户
DB_NAME=zyzx #要备份的数据库名字
DB_USER=root #数据库登录名
DB_PASS=root #数据库登陆密码
DAYS=7 #每次备份保存的时间
cd $OUT_DIR #进入到备份目录下
DATE=`date +%Y_%m_%d` #当前时间
OUT_SQL="$DATE.sql" #备份出来的sql文件名
TAR_SQL="mysqldata_bak_$DATE.tar.gz" #备份的sql文件打包后的文件名
#备份文件的操作,这里要注意自己环境的mysql.sock的路径 一般可能是在/temp下面
$DUMP --socket=/var/lib/mysql/mysql.sock -h192.168.200.135 -u$DB_USER -p$DB_PASS $DB_NAME >$OUT_SQLtar -czf $TAR_SQL ./$OUT_SQL #压缩为.tar.gz格式
rm $OUT_SQL #删除生成的sql文件
chown $LINUX_USER:$LINUX_USER $OUT_DIR/$TAR_SQL #更改备份数据库文件的所有者
find $OUT_DIR -name "mysqldata_bak*" -type f -mtime +$DAYS -exec rm {} \; #删除7天前的备份文件(注意:{} \;中间有空格)
将脚本文件设置成可执行文件类型:
chmod +x /home/mysql_data/mysql_databak.sh
添加定时任务:
vi /etc/crontab
在下面添加以下内容:
30 1 * * * root /home/mysql_data/mysql_databak.sh #表示每天凌晨1点30执行备份(具体时间设置网上查下即可)
重启定时任务:
service crond restart
至此,定时备份mysql数据库已经完成。
然后就是要定是传输到另外一台服务器,这个我是采用scp的方式,当然我这里是服务器上没有创建ftp,使用ftp很方便,具体请自行查询,这里说一下我采用的方式。
要使用scp传输文件,有一个缺点就是每次都要输入密码,所以我们首先创建两个服务器之间的scp免密传输。
1. ssh-keygen -t rsa
然后第一个的弹出提示输入括号的东西,然后回车,接下来的提示直接回车就行。
2. 修改两个服务器的ssh_config
vi /etc/ssh/ssh_config
在内容中把Host哪一行的注释和IdentityFile ~/.ssh/id_rsa哪一行的注释取消。然后保存文件。
3. scp ~/.ssh/id_rsa.pub IP地址:/root/.ssh/authorized_key
将文件传到另外的服务器上就可以了免密码传输文件了。
4. 测试一下:touch ~/test
scp ~/test root@ip地址:/root/
如果不用密码就成了。
这样,就建立起了服务器之间的scp免密传输,然后就是定时脚本了。
同样的步骤就不叙述了,直接上脚本内容:
传输脚本内容很简单,一句话即可:
#!/bin/sh
scp /home/t123 root@192.168.137.128:/home #/home/t123值得是要备份的文件,这个是本地目录;@后面跟的是要传输的服务器ip,在后面的/home是服务器的路径
完成之后和上面的备份时的操作一样,修改成可执行文件,添加定时任务等。