mysql备份

#!/bin/bash

back_user=root

back_passwd=xx

Date=`date +%Y%m%d`

back_dir=/home/backup/data_back

mkdir ${back_dir}/${Date}

###

for i in $(/usr/local/mysql/bin/mysql -u${back_user} -p"${back_passwd}" -e 'show databases \G '|grep Database |cut -d: -f2|sort|sed '2,5d'|sed '3d')

do

        back_start=`date '+%H:%M:%S'`

     /usr/local/mysql/bin/mysqldump -u${back_user} -p${back_passwd} ${i} |gzip >${back_dir}/${Date}/${i}.gz

        back_end=`date '+%H:%M:%S'`

        echo "$i ${Date} backup is success" >> ${back_dir}/${Date}/success.txt

        echo "$i backup start time $back_start" >>${back_dir}/${Date}/success.txt

        echo "$i backup end time $back_end" >>${back_dir}/${Date}/success.txt

        echo "------------------" >>${back_dir}/${Date}/success.txt

done

2、把该脚本添加到cron中

30 03 * * * (sh /home/backup/backup.sh)

#################把外网服务器每天备份的数据定时拷贝到内网服务器#######

1、在内网服务器上生成密钥(rsa),并且把公钥拷贝到外网服务器/root/.ssh下,并改名为authorized_keys,注意权限为600,这样就可以每天定时远程拷贝,避免了手动输入密码的苦恼

2、远程执行脚本

#!/bin/bash

Date=`date +%Y%m%d`

back_dir=/home/backup/data_back

mkdir ${back_dir}/${Date}

for i in `cat /home/backup/1.txt`

do

        scp root@xx:/home/backup/data_back/${Date}/${i}.gz /home/backup/data_back/${Date}

done

】xx:为外网ip

/home/backup/data_back/${Date}/${i}.gz :备份数据在外网服务器的位置

/home/backup/data_back/${Date}:拷贝到本地的位置

 root@game-center:/home/backup# cat 1.txt 

gm_account

trickraft

其中1.txt是指定要备份的数据库,与外网服务器备份路径是一致

有一点不明白,内网服务器中脚本与1.txt在同一个目录,for循环中1.txt并没有写绝对路径,

每次都无法远程scp

你可能感兴趣的:(mysql备份)