一 Myql备份到本地

#!/bin/bash

#标记程序开始时间

date_start=`date|awk -F"[ :]" '{print $4*3600 + $5*60 +$6}'`

#进入要备份的目录

cd /usr/backup

#数据库备份命令,包括存储过程,使用utf8字符编码,以"global_日期"命名

/usr/local/mysql/bin/mysqldump --opt -R -uroot -proot --default-character-set=utf8 global>global_$(date +%Y%m%d).sql

#/将数据库备份文件进行压缩

tar zcvf global_$(date +%Y%m%d).tar.gz global_$(date +%Y%m%d).sql

#备份完后将原文件删除

rm -rf global_$(date +%Y%m%d).sql       

#删除备份时间超过100天的备份文件

rm -rf global_$(date -d -100day +%Y%m%d ).tar.gz

#标记程序结束时间

date_end=`date|awk -F"[ :]" '{print $4*3600 + $5*60 +$6}'`

#计算程序执行时间

time=`expr "$date_end" - "$date_start"`

#生成日志文件

echo 'backup database global in' $(date +%Y-%m-%d%H:%M:%S) >> /usr/backup/dbbackup.log

#结束

echo 'Database backup time' $time >> /usr/backup/dbbackup.log

二 把备份用ftp传送到目的计算机

新建本地用户或虚拟用户作为ftp传输帐号 制定存储目录

1.1使用本地用户 backuper backuper  密码backup

目录在/usr/sqlbackup

#sudo groupadd backuper

#sudo useradd -g backuper backuper -d /usr/sqlbackup -m

#sudo passwd backuper 

1.2 使用虚拟用户

         增加新用户在/home/virtual中添加   vi /home/virtual

         添加后使用以下命令更新         db_load -T -t hash -f /home/virtual /etc/virtual.db

         添加用户配置文件               cd /etc/vsftpd_user_conf/                                                                          vi [用户名]               

               添加以下内

                 virtual_use_local_privs=YES 

write_enable=YES 

anon_world_readable_only=NO 

anon_upload_enable=YES 

anon_mkdir_write_enable=YES 

anon_other_write_enable=YES 

local_root=/home/virtualuser/<用户名>

      保存寻出

      进入目录:cd /home/virtualuser

      创建目录:mkdir <用户名>

                chmod 777 <用户名

      重启 vsftp :service vsftpd restart 

      如新用户无法登陆,执行一次 

   chown -R virtualuser:virtualuser /home/virtualuser

上述是在centos下添加虚拟用户的方法 

本次实例 用户名为backuper 密码为backup

目录/home/virtualuser/backuper

2安装配置vsftpd

#sudo apt-get install vsftpd

配置文件/etc/vsftpd.conf

不允许匿名

允许上传权限

3 FTP传输数据库备份脚本sql_ftp.sh 放在/usr/backup

############################################################################

#ftp -i -v -n 121.14.17.192 <<END_FTP

#user backuper backup

#binary

#put global_$(date +%Y%m%d).tar.gz 

#bye

#END_FTP

###############################################################################

三 最终脚本:(以备份global数据库为例 globalbackup.sh

#!/bin/bash

#标记程序开始时间

date_start=`date|awk -F"[ :]" '{print $4*3600 + $5*60 +$6}'`

#进入要备份的目录

cd /usr/backup

#数据库备份命令,包括存储过程,使用utf8字符编码,以"global_日期"命名

/usr/local/mysql/bin/mysqldump --opt -R -uroot -proot --default-character-set=utf8 global>global_$(date +%Y%m%d).sql

#将数据库备份文件进行压缩

tar zcvf global_$(date +%Y%m%d).tar.gz global_$(date +%Y%m%d).sql

#把数据库备份文件用ftp上传到相应地址

ftp -i -v -n 122.14.14.192 <<END_FTP

user backuper backup

binary

put global_$(date +%Y%m%d).tar.gz

bye

END_FTP

#备份完后将原文件删除

rm -rf global_$(date +%Y%m%d).sql

#删除备份时间超过100天的备份文件

rm -rf global_$(date -d -100day +%Y%m%d ).tar.gz

#标记程序结束时间

date_end=`date|awk -F"[ :]" '{print $4*3600 + $5*60 +$6}'`

#计算程序执行时间

time=`expr "$date_end" - "$date_start"`

#生成日志文件

echo 'backup database global in' $(date +%Y-%m-%d%H:%M:%S) >> /usr/backup/dbbackup.log

#结束

echo 'Database backup time' $time >> /usr/backup/globalbackup.log

四 脚本使用方法:

新建目录 /usr/backup 有读写权限 把脚本放进该目录 脚本可执行

把脚本名修改为数据库名 如数据库名为global 则脚本名为globalbackup.sh

  把脚本里面的global数据库名 改为相应的数据库名 即替换所有的global

  把数据库用户密码修改为相应的用户密码

  把ftp上传地址改为120.132.123.125

  本地备份保留时间默认为100天 按需修改

  执行脚本 sudo sh globalbackup.sh

执行成功后  增加cron计划任务 定时执行脚本

   #crontab -e

分 时 日 月 周 

00 02 * * * sudo sh /usr/backup/dbbackup.sh

各个vps设置的时间注意要分开