暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

​mysql数据库7天备份方案和脚本(mysqldump)

MySQLDBA运维零基础自学 2021-04-13
707

先给一个简单的测试Demo

------------------------------------------------------------------------------------------------------------------------------------

#!/bin/sh
bak_path=/data/xtrabackup
date_now=`date +%Y%m%d`
date_dep=`date -d "-1 week " +%Y%m%d`

cd $bak_path
pwd

echo "================Backup database=====================">>log

if [ -d $date_dep ]; then
   echo "`data +%F%H%M%S` Remove depricated folder  $date_dep.">>log
rm -rf $date_dep
fi

if  [ ! -d $date_now ] ; then
 mkdir  $date_now
fi

cd $date_now

echo "`date +%F%H%M%S ` Begin to back db">>../log
/usr/local/mysql/bin/mysqldump -ucjr -pcjr -h39.108.108.46 -P3306  --single-transaction  --master-data=2  test1 t1|gzip  >test1.t1.sql.gz
echo "`date +%F%H%M%S ` Finish to backup db">>../log

------------------------------------------------------------------------------------------------------------------------------------


一、 简介

本文档介绍在linux如何使用crontab+shell+scp的方式,部署mysql数据库数据7天定期备份,包括本机备份和远程服务器备份,保证数据安全性。

二、 本机备份数据库

1、 编写shell脚本

# vi db_bak.sh

2、 输入内容如下

#!/bin/sh

bak_path=/usr/local/dbbak # 数据库数据文件备份目录

date_now=`date +%Y%m%d` # 当前日期

date_dep=`date -d "-1 week" +%Y%m%d` # 7天前日期

 

cd $bak_path

 

echo "================Backup database================" >> log

if [ -d $date_dep ]; then

    echo "`date '+%F %H:%M:%S'` Remove deprecated folder $date_dep." >> log

    rm -rf $date_dep # 删除7天前备份数据

fi

 

if [ ! -d $date_now ]; then

    mkdir $date_now # 创建当前日期备份数据文件夹

fi

cd $date_now

 

echo "`date '+%F %H:%M:%S'` Begin to backup testdb1." >> ../log

mysqldump -utest -ptest --opt --default-character-set=utf8 testdb1|gzip > testdb1.sql.gz # 使用mysqldump备份testdb1数据库实例并压缩成gzip格式,test为数据库登录用户名和密码

echo "`date '+%F %H:%M:%S'` Finish to backup testdb1." >> ../log

 

echo "`date '+%F %H:%M:%S'` Begin to backup testdb2." >> ../log

mysqldump -utest -ptest --opt --default-character-set=utf8 testdb2|gzip > testdb2.sql.gz # 使用mysqldump备份testdb2数据库实例并压缩成gzip格式,test为数据库登录用户名和密码

echo "`date '+%F %H:%M:%S'` Finish to backup testdb2." >> ../log

 

echo "" >> ../log

3、 输入:wq”保存退出

4、 db_bak.sh文件增加执行权限

# chmod 777 db_bak.sh

5、 使用root用户在crontab中增加定时任务

# vi etc/crontab

6、 crontab最后面增加如下task

01 3 * * * root ./usr/local/dbbak/db_bak.sh # 每天早上的301分执行此任务

7、 重启crontab

# /etc/init.d/crond restart

8、 检验

等第二天或者把执行时间改到当前时间后1分钟,看是否执行

 

三、 远程拷贝数据库备份文件

1、 先配置好两台服务器scp不需要密码,具体如何配置可以百度下,此处不再赘述

2、 创建shell脚本,并拷贝内容如下

#!/bin/sh

bak_path=/usr/local/dbbak # 数据库数据文件备份目录

date_now=`date +%Y%m%d` # 当前日期

date_dep=`date -d "-1 week" +%Y%m%d` # 7天前日期

server=192.168.0.150 # 数据库备份文件所在服务器

port=22 # scp端口

user=test # scp用户

 

cd $bak_path

 

echo "========================Backup database========================" >> log

if [ -d $date_dep ]; then

    echo "`date '+%F %H:%M:%S'` Remove deprecated folder $date_dep." >> log

    rm -rf $date_dep # 删除7天前备份数据

fi

 

if [ ! -d $date_now ]; then

    mkdir $date_now # 创建当前日期备份数据文件夹

fi

cd $date_now

 

echo "`date '+%F %H:%M:%S'` Begin to copy db backup files from server $server." >> ../log

scp -P $port $user@$server:/$bak_path/$date_now/*.gz .

echo "`date '+%F %H:%M:%S'` Finish to copy db backup files." >> ../log

echo "" >> ../log

3、 crontab增加如下定时task,并重启crontab

# 01 5 * * * root ./usr/local/dbbak/rcp.sh # 注意执行时间应该比数据库服务器备份文件慢

4、 检验

等第二天或者把执行时间改到当前时间后1分钟,看是否执行


文章转载自MySQLDBA运维零基础自学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论