mysql备份

linux

#!/bin/bash
#*******************************Code Start*****************************
clientPath=/home/usr/local/mysql/bin/
_ip=192.168.0.153
_port=3306
_database=backupDb
###备份目的地
_desDir=/home/usr/local/dbbackup/
_name=backupDbUser
_pass=backupDbUserPassword
Ymd=$(date +%Y%m%d)
H=$RANDOM
M=$RANDOM
if [ ! -d "$_desDir" ]; then
    mkdir "$_desDir"
fi
if [ ! -d "$_desDir/$Ymd" ]; then
    mkdir "$_desDir/$Ymd"
fi
backupFilePath="${_desDir}${Ymd}/${_database}${Ymd}${H}${M}.sql"
$clientPath/mysqldump --verbose --host=$_ip --port=$_port --user=$_name  --password=$_pass ${_database}> ${backupFilePath}
echo "***************backup database %_database% finish.****************"
  • 赋权限运行 chmod 750 backupdb.sh , 然后可以测试能否正常运行 ./backupdb.sh
  • 加入定时任务.凌晨2:00执行. crontab -e , 在最后增加
    # backdb.sh文件路径需要修改.
     * 2 * * * /home/usr/local/backdb.sh
    

增加保留7天及每月保留某天1份

  • 方法1: 可以重新写一个脚本. 来进行检查删除.放到 crontab里即可. 这里不另外说.
  • 方法2: 直接在备份脚本里检查删除. 如下.
#!/bin/bash
#*******************************Code Start*****************************
_keepDays=7
_keepOneInMonth=28
clientPath=/home/usr/local/mysql/bin/
_ip=192.168.0.153
_port=3306
_database=backupDb
###备份目的地
_desDir=/home/usr/local/dbbackup/
_name=backupDbUser
_pass=backupDbUserPassword
Ymd=$(date +%Y%m%d)
H=$RANDOM
M=$RANDOM
if [ ! -d "$_desDir" ]; then
    mkdir "$_desDir"
fi
if [ ! -d "$_desDir/$Ymd" ]; then
    mkdir "$_desDir/$Ymd"
fi
backupFilePath="${_desDir}${Ymd}/${_database}${Ymd}${H}${M}.sql"
$clientPath/mysqldump --verbose --host=$_ip --port=$_port --user=$_name  --password=$_pass ${_database}> ${backupFilePath}
echo "***************backup database %_database% finish.****************"
###较为保守的方式删除.即.每次运行删除前第n天的.
 _4dayAgo=$(date -d "${_keepDays} day ago" +"%Y%m%d")
echo ${_4dayAgo}
 _currentKeepDayInCurrentMonth=$(date +%Y%m)${_keepOneInMonth}
if [[ ! -d "${_desDir}/${_4dayAgo}" && "${_currentKeepDayInCurrentMonth}" != "${_4dayAgo}" ]]; then
    rm -rf "${_desDir}/${_4dayAgo}"
fi
echo "***************backup and check file finish.****************"

增加压缩功能.

  • 发现单纯保留备份文件有点过大,因此增加压缩的功能。压缩之后将原备份文件删除。
#!/bin/bash
#*******************************Code Start*****************************
_keepDays=7
_keepOneInMonth=28
clientPath=/home/usr/local/mysql/bin/
_ip=192.168.0.153
_port=3306
_database=backupDb
###备份目的地
_desDir=/home/usr/local/dbbackup/
_name=backupDbUser
_pass=backupDbUserPassword
Ymd=$(date +%Y%m%d)
H=$RANDOM
M=$RANDOM
if [ ! -d "$_desDir" ]; then
    mkdir "$_desDir"
fi
if [ ! -d "$_desDir/$Ymd" ]; then
    mkdir "$_desDir/$Ymd"
fi
backupFileParentPath="${_desDir}${Ymd}"
backupFileName="${_database}${Ymd}${H}${M}.sql"
backupFilePath="${backupFileParentPath}/${backupFileName}"
$clientPath/mysqldump --verbose --host=$_ip --port=$_port --user=$_name  --password=$_pass ${_database}> ${backupFilePath}
echo "***************backup database %_database% finish.****************"
###较为保守的方式删除.即.每次运行删除前第n天的.
 _4dayAgo=$(date -d "${_keepDays} day ago" +"%Y%m%d")
echo ${_4dayAgo}
 _currentKeepDayInCurrentMonth=$(date +%Y%m)${_keepOneInMonth}
if [[ -d "${_desDir}/${_4dayAgo}" && "${_currentKeepDayInCurrentMonth}" != "${_4dayAgo}" ]]; then
    rm -rf "${_desDir}/${_4dayAgo}"
fi
if [ -f "${backupFilePath}" ]; then
	###此处tar使用 -C 切换临时工作,如果,直接使用绝对路径会有点问题. 会报:从成员名中删除开头的“/”的警告,tar的效果变成全路径,绝对路径的父文件夹也会放进去。可用增加P参数解决。但是不太好,应该使用C来来指定切换临时工作目录。这样子tar打包和解压就正常了。
    tar --remove-files -czvf "${backupFilePath}.tar.gz" -C "${backupFileParentPath}" "${backupFileName}"
fi
echo "***************backup and check file finish.****************"

window

  • 备份脚本 backupdb.bat
rem *******************************Code Start*****************************
@echo off
set clientPath=d:\Mysql\bin\
set _ip=192.168.0.153
set _port=3306
set _database=backupDb
set _desDir=d:\Mysql\dbbackup\
set _name=backupDb
set _pass=backupDbPassword
set Ymd=%date:~,4%%date:~5,2%%date:~8,2%
set H=%random%
set M=%random%
md %_desDir%%Ymd%
set backupFilePath=%_desDir%%Ymd%\%_database%%Ymd%%H%%M%.sql
%clientPath%mysqldump --opt -h%_ip% -P%_port% -u%_name%  --password=%_pass% %_database%> %backupFilePath%"
echo ***************backup database %_database% finish.***************** 
rem window系统创建定时任务  控制面板->计划任务->创建任务->创建一个24小时重复任务运行任务,凌晨两点即可
@echo on
rem *******************************Code End*****************************
  • 加入定时任务中, 控制面板->计划任务->创建任务->创建一个每天凌晨两点运行backup.bat的任务即可
  • p.s 可以先运行backup.bat 测试是否正常, 也可以在定时任务列表里右键运行,测试脚本是否能正常运行.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值