mysql备份脚本

linux环境


全量备份脚本

# vim /root/DBFullyBak.sh //添加以下内容
#!/bin/bash
# Program
#    use mysqldump to Fully backup mysql data per week!
# History
#    2017-12-27     first
# Path
#    ....
BakDir=/home/mysql/backup
LogFile=/home/mysql/backup/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
/usr/local/mysql/bin/mysqldump -uroot -p123456 --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $DumpFile
/bin/tar czvf $GZDumpFile $DumpFile
/bin/rm $DumpFile
Last=`date +"%Y年%m月%d日 %H:%M:%S"`
echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile
cd $BakDir/daily
rm -f *

增量备份脚本

# cat /root/DBDailyBak.sh //内容为下
#!/bin/bash
# Program
#    use cp to backup mysql data everyday!
# History
#    2017-12-27     first
# Path
#    ....
BakDir=/home/mysql/backup/daily
BinDir=/home/mysql/data
LogFile=/home/mysql/backup/bak.log
BinFile=/home/mysql/data/mysql-bin.index
/usr/local/mysql/bin/mysqladmin -uroot -p123456 flush-logs
#这个是用于产生新的mysql-bin.00000*文件
Counter=`wc -l $BinFile |awk '{print $1}'`
NextNum=0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。
for file in  `cat $BinFile`
do
        base=`basename $file`
        #basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
        NextNum=`expr $NextNum + 1`
        if [ $NextNum -eq $Counter ]
        then
                echo $base skip!  >> $LogFile
        else
                dest=$BakDir/$base
                if(test -e $dest)
                #test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
                then
                        echo  $base exist! >> $LogFile
                else
                        cp $BinDir/$base $BakDir
                        echo $base copying >> $LogFile
                fi
        fi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $LogFile

设置crontab执行备份脚本

#crontab -l //内容为下
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /root/DBFullyBak.sh >/dev/null 2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6 /root/DBDailyBak.sh >/dev/null 2>&1

检测shell语法是否正确

sh -n /root/DBFullyBak.sh

windows环境下小库全备份

bat写法

@echo off  
color 0D  
MODE con: COLS=71 LINES=25 
title mysql数据库自动备份脚本(任务计划)
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
set "bak_dir= D:\db_backup"
set MYSQL=C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin
md %bak_dir%

@echo 开始备份数据库。
mysqldump -uroot -proot --single-transaction smartpay > %obj_dir%\%Ymd%smartpay.sql
@echo 删除七天前备份的文件。
forfiles /p "D:\db_backup" /s /m *.* /d -7 /c "cmd /c del @path"
@echo 数据库备份完成,3秒后程序退出。
ping /n 3 127.0.0.1 >nul
exit

xcopy新建批处理文件 backup.dat

net stop mysql
xcopy "C:\Program Files\MySQL\MySQL Server 5.0\data\piaoyi\*.*" D:\db_backup\%date:~0,10%\ /y
net start mysql

windows环境下大库需要做全+增

全备份脚本


@echo off & setlocal ENABLEEXTENSIONS 

# ---------- 配置项 ---------- 

# 备份放置的路径,加 \ 
set BACKUP_PATH=D:\Backup\ 

# 要备份的数据库名称,多个用空格分隔 
set DATABASES=database1 database2 database3 

# MySQL 用户名 
set USERNAME=root 

# MySQL 密码 
set PASSWORD=123456 

# MySQL Bin 目录,加 \ 
# 如果可以直接使用 mysqldump(安装时添加 MySQL Bin 目录到了环境变量),此处留空即可 
set MYSQL=D:\SERVER\MySQL\bin\ 

# WinRAR 自带命令行工具的可执行文件路径,长文件名注意用 Dos 长文件名书写方式 
set WINRAR=C:\Progra~1\WinRAR\Rar.exe 

# ---------- 以下请勿修改 ---------- 

set YEAR=%date:~0,4% 
set MONTH=%date:~5,2% 
set DAY=%date:~8,2% 
# 如果在 dos 下输入 time 返回的不是 24 小时制(没有 0 填充),请自行修改此处 
set HOUR=%time:~0,2% 
set MINUTE=%time:~3,2% 
set SECOND=%time:~6,2% 

set DIR=%BACKUP_PATH%%YEAR%\%MONTH%\%DAY%\ 
set ADDON=%YEAR%%MONTH%%DAY%%HOUR%%MINUTE%%SECOND% 

# create dir 
if not exist %DIR% ( 
mkdir %DIR% 2>nul 
) 
if not exist %DIR% ( 
echo Backup path: %DIR% not exists, create dir failed. 
goto exit 
) 
cd /d %DIR% 

# backup 
echo Start dump databases... 
for %%D in (%DATABASES%) do ( 
echo Dumping database %%D ... 
%MYSQL%mysqldump -u%USERNAME% -p%PASSWORD% %%D > %%D.%ADDON%.sql 2>nul 
# winrar 
if exist %WINRAR% ( 
%WINRAR% a -k -r -s -m1 -ep1 %%D.%ADDON%.rar %%D.%ADDON%.sql 2>nul 
del /F /S /Q %%D.%ADDON%.sql 2>nul 
) 
) 
echo Done 

:exit 

增备脚本


@echo off 

# ------- 配置项 ------- 

# 要执行的文件名 
set FILE=D:\cron\cron_backup.bat 

# 计划频率类型 
set FREQUENCY=DAILY 

# 频率,与上面的计划频率类型对应 
set MODIFIER=1 

# 该计划执行的时间(24 小时制) 
set DATETIME=00:30:00 

# 计划的名字 
set NAME="Backup Cron Job" 

# 计划执行用户,不建议修改 
set USER="System" 

# ------- 以下请勿修改 ------- 

schtasks /Create /RU %USER% /SC %FREQUENCY% /MO %MODIFIER% /ST %DATETIME% /TN %NAME% /TR %FILE% 
pause 

你可能感兴趣的:(mysql)