您的位置:首页 > 运维架构 > Linux

定时备份mysql数据库 并删除7天前的备份 (windows linux )

2013-05-03 14:24 393 查看
@echo off

: basedata

set ip=10.39.28.234

set user=root

set password=root1234

set databaseName=crm_cloud

set /a backupDays=7

set mysqlBinPath=C:\Program Files (x86)\MySQL\MySQL Server 6.0\bin\

set mysqlBackupPath=C:\mysql_back\

set logs=%mysqlBackupPath%\logs.txt

set day=%date:~7,2%

set month=%date:~4,2%

set /a year=%date:~10,4%

if not exist %mysqlBackupPath% md %mysqlBackupPath%

echo %year%-%month%-%day% >> %logs%

set backupingFilePath=%mysqlBackupPath%\%databaseName%_%year%-%month%-%day%.sql

cd /d %mysqlBinPath%

echo backupdata >> %logs%

set errorlevel=0

echo errorlevel=%errorlevel%

mysqldump -h%ip% -u%user% -p%password% --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x %databaseName%>%backupingFilePath%

set /a myerrorlevel=%errorlevel%

echo myerrorlevel=%myerrorlevel%

if %myerrorlevel% leq 0 (

if exist %backupingFilePath% (

echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql

echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql >> %logs%

) else (

echo backupfaile

echo backupfaile >> %logs%

pause

exit

)

) else (

echo backupfail

echo backupfail >> %logs%

if exist %backupingFilePath% (

del %backupingFilePath%

)

pause

exit

)

rem delete backupDays's backup

set /a day=1%day%-100-backupDays

rem

if %day% lss 1 (

set /a daysTemp=day

call :daysOfLastMonth

) else set /a daysTemp=0

set /a day+=daysTemp

rem

if day lss 10 (set day=0%day%)

set /a month=%month%

if %month% lss 10 (set month=0%month%)

set deleteBackupFilePath=%databaseName%%year%%month%%day%.sql

echo mysqlBackup_%year%-%month%-%day%.sql

echo mysqlBackup_%year%-%month%-%day%.sql >> %logs%

if exist %mysqlBackupPath%\%deleteBackupFilePath% (

del %mysqlBackupPath%\%deleteBackupFilePath%

echo delcomplete >> %logs%

) else (

echo the document isn't exist >> %logs%

)

echo -----------------------------------------------------end >> %logs%

:daysOfLastMonth

set /a month=%month%-1

set /a mod1=%year%%%4

set /a mod2=%year%%%100

if %month% lss 1 (

set month=12

set year=%year%-1

set day=31

) else (

if %month% == 2 (

set day=28

if %mod1% == 0 (

set day=29

if mod2 == 0 (

set day=28

)

)

) else (

for %%a in (1 3 5 7 8 10 12) do (

if %month% == %%a (

set day=31

goto :eof

)

)

set day=30

)

)

goto :eof

以上为windows版本

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

以下为linux版本第一个

#!/bin/bash

#Write by oneleaf@gmail.com

#数据库服务器地址

DBHOST=localhost

#数据库登录名

USERNAME=root

#数据库密码

PASSWORD=

#需要备份的数据库 或 输入类似 db1 db2 的列表清单

DBNAMES="all"

#备份MYSQL时生成CREATE数据库语句

CREATE_DATABASE="yes"

#备份的目录

BACKUPDIR="/tmp/mysqlbackup"

#发生到邮件的地址

MAILADDR="test@example.com"

#邮件最大附件尺寸2M

MAILMAXATTSIZE="2000000"

#当前备份日期和时间

DATE=`date +%Y-%m-%d_%H_%M`

OPT="--quote-names --opt"

#检查备份路径是否存在,不存在则建立

if [ ! -e "${BACKUPDIR}" ]; then

mkdir -p "${BACKUPDIR}"

fi

#删除备份路径下的所有文件

rm -fv ${BACKUPDIR}/*

#检查是否需要生成CREATE数据库语句

if [ "${CREATE_DATABASE}" = "yes" ]; then

OPT="${OPT} --databases"

else

OPT="${OPT} --no-create-db"

fi

#检查是否是备份所有数据库

if [ "${DBNAMES}" = "all" ]; then

DBNAMES="--all-databases"

fi

BACKUPFILE=${DATE}.sql.gz

cd ${BACKUPDIR}

#备份数据库

`which mysqldump` --user=${USERNAME} --password=${PASSWORD} --host=${DBHOST} ${OPT} ${DBNAMES} |gzip > "${BACKUPFILE}"

#获取备份文件的尺寸

BACKFILESIZE=`du -b ${BACKUPFILE}|sed -e "s/\t.*$//"`

#检查是否需要分割

if [ ${BACKFILESIZE} -ge ${MAILMAXATTSIZE} ]; then

#分割数据库,合并使用 cat ${BACKUPFILE}.* > ${BACKUPFILE}

`which split` -b ${MAILMAXATTSIZE} ${BACKUPFILE} ${BACKUPFILE}.

for BFILE in ${BACKUPFILE}.*

do

echo "Backup Databases: ${DBNAMES}; Use cat ${BACKUPFILE}.* > ${BACKUPFILE}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BFILE}"

done

else

echo "Backup Databases: ${DBNAMES}" | mutt ${MAILADDR} -s "MySQL Backup SQL Files for ${HOST} - ${DATE}" -a "${BACKUPFILE}"

fi

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

以下为第二个版本

ubuntu定时备份mysql,首先要写一段shell脚本,用来备份mysql数据库,再通过crontab定时执行备份mysql数据库的shell脚本。

1.备份mysql的shell脚本如下:

?

1

2

3

4

5

6

#!/bin/bash

date_str=$(date +%Y%m%d-%T)

cd /home/steven/backup

mysqldump -h localhost -u root --password=xxxx -R -E -e \

--max_allowed_packet=1048576 --net_buffer_length=16384 databaseName\

| gzip > /home/steven/backup/juziku_$date_str.sql.gz

把上面这个脚本存放位置:/home/steven/mysql_backup.sh (当然,也可以放在其他位置)

再赋于执行的权限,通过下面命令:

sudo chmod +x /home/steven/mysql_backup.sh

完成这步,我们就来执行一下这段脚本,看能不能备份mysql数据库。

在命令行输入

./mysql_backup.sh

就可以看到备份好的数据库文件了

2.完成上面这步,就可以备份mysql数据库了,接下来,我们再通过crontab定时执行这段脚本。

使用crontab -e命令,这个命令的使用比较简单。

在命令行输入中,直接输入 crontab -e

就会打开一个编辑窗口,最后一行会有内容格式的提示:

# m h dom mon dow command

具体意义表示:分钟 小时 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command),*表示任意时间。例如:0 3 * * * /home/steven/mysql_backup.sh就是:每天早上3点,执行mysql_backup.sh脚本。

我们只要在里面添加一行就行了,内容如下:

?

1

2

# 备份mysql数据库 每天早上3点整执行

0 3 * * * /home/steven/mysql_backup.sh

这样,每天早上3点,就会自动备份mysql数据库了。
-=----------------------------------------

第三个版本

我只需要
1、创建保存备份文件的目录:/home/mysql_data

cd /home

mkdir mysql_data

2、创建备份脚本文件:/home/mysql_data/mysql_databak.sh

cd /home

cd mysql_data

touch mysql_databak.sh

vim mysql_databak.sh

输入以下内容:

1

#!/bin/sh

2

/etc/init.d/mysqld stop #执行备份前先停止MySql,防止有数据正在写

入,备份出错

3

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

4

DAYS=7 #DAYS=7代表删除7天前的备份,即只保留最近

7天的备份

5

BK_DR=/home/mysql_data #备份文件存放路径

6

DB_DR=/var/lib/mysql/pw85 #数据库路径

7

LINUX_USER=root #系统用户名

8

tar zcvf $BK_DR/mysql_data$date.tar.gz $DB_DR #备份数据

========================================第2页========================================

9

/etc/init.d/mysqld start #备份完成后,启动MySql

10

chown -R $LINUX_USER:$LINUX_USER $BK_DR #更改备份

数据库文件的所有者

11

find $BK_DR -name "mysql_data*" -type f -mtime +$DAYS -exec rm {} \

;

#删除7天前的备份文件(注意:{} \;中间有空格)

12

deldate=` date -d -7day +%Y_%m_%d ` #删除ftp服务器空间7天前的备份

13

ftp -n<open 192.168.1.1 21 #打开ftp服务器。21为ftp端口

14

user admin 123456 #用户名、密码

15

binary #设置二进制传输

16

cd mysqlbak #进入ftp目录(注意:这个目录必须真实存在)

17

lcd /home/mysql_data #列出本地目录

18

prompt

19

mput mysql_data$date.tar.gz mysql_data$date.tar.gz #上传目录中的

文件

20

mdelete mysql_data$deldate.tar.gz mysql_data$deldate.tar.gz #删除

ftp空间7天前的备份

21

close #关闭

22

bye ! #退出

3、修改文件属性,使其可执行

chmod +x /home/mysql_data/mysql_databak.sh

4、修改/etc/crontab #添加计划任务

vi /etc/crontab #在下面添加

5 23 * * * root /home/mysql_data/mysql_databak.sh #表示每天23点05分

执行备份

5、重新启动crond使设置生效

/etc/rc.d/init.d/crond restart

chkconfig crond on #设为开机启动

service crond start #启动

转自:http://www.blogjava.net/qileilove/archive/2012/04/23/376353.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: