六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 820|回复: 0

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

[复制链接]
 楼主| 发表于 2013-12-20 01:59:36 | 显示全部楼层 |阅读模式
定时备份mysql数据库 并删除7天前的备份 (windows linux )it论坛
  1. @echo off



  2. : basedata
  3. set ip=10.39.28.234
  4. set user=root
  5. set password=root1234
  6. set databaseName=crm_cloud

  7. set /a backupDays=7
  8. set mysqlBinPath=C:\Program Files (x86)\MySQL\MySQL Server 6.0\bin\
  9. set mysqlBackupPath=C:\mysql_back\

  10. set logs=%mysqlBackupPath%\logs.txt
  11. set day=%date:~7,2%
  12. set month=%date:~4,2%
  13. set /a year=%date:~10,4%


  14. if not exist %mysqlBackupPath% md %mysqlBackupPath%
  15. echo %year%-%month%-%day% >> %logs%

  16. set backupingFilePath=%mysqlBackupPath%\%databaseName%_%year%-%month%-%day%.sql
  17. cd /d %mysqlBinPath%

  18. echo backupdata >> %logs%
  19. set errorlevel=0
  20. echo errorlevel=%errorlevel%
  21. mysqldump -h%ip% -u%user% -p%password% --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x %databaseName%>%backupingFilePath%
  22. set /a myerrorlevel=%errorlevel%
  23. echo myerrorlevel=%myerrorlevel%
  24. if %myerrorlevel% leq 0 (
  25. if exist %backupingFilePath% (
  26. echo backupcomplete mysqlBackup_%year%-%month%-%day%.sql
  27. echo  backupcomplete mysqlBackup_%year%-%month%-%day%.sql >> %logs%
  28. ) else (
  29. echo backupfaile
  30. echo backupfaile >> %logs%
  31. pause
  32. exit
  33. )
  34. ) else (
  35. echo backupfail
  36. echo backupfail >> %logs%
  37. if exist %backupingFilePath% (
  38. del %backupingFilePath%
  39. )
  40. pause
  41. exit
  42. )
  43. rem delete backupDays's backup


  44. set /a day=1%day%-100-backupDays
  45. rem
  46. if %day% lss 1 (
  47. set /a daysTemp=day
  48. call :daysOfLastMonth
  49. ) else set /a daysTemp=0
  50. set /a day+=daysTemp
  51. rem
  52. if day lss 10 (set day=0%day%)
  53. set /a month=%month%
  54. if %month% lss 10 (set month=0%month%)

  55. set deleteBackupFilePath=%databaseName%%year%%month%%day%.sql
  56. echo mysqlBackup_%year%-%month%-%day%.sql
  57. echo mysqlBackup_%year%-%month%-%day%.sql >> %logs%
  58. if exist %mysqlBackupPath%\%deleteBackupFilePath% (
  59. del %mysqlBackupPath%\%deleteBackupFilePath%

  60. echo delcomplete >> %logs%
  61. ) else (

  62. echo the document isn't exist >> %logs%
  63. )
  64. echo -----------------------------------------------------end >> %logs%


  65. :daysOfLastMonth
  66. set /a month=%month%-1
  67. set /a mod1=%year%%%4
  68. set /a mod2=%year%%%100

  69. if %month% lss 1 (
  70. set month=12
  71. set year=%year%-1
  72. set day=31
  73. ) else (
  74. if %month% == 2 (
  75. set day=28
  76. if %mod1% == 0 (
  77. set day=29
  78. if mod2 == 0 (
  79. set day=28
  80. )
  81. )
  82. ) else (
  83. for %%a in (1 3 5 7 8 10 12) do (
  84. if %month% == %%a (
  85. set day=31
  86. goto :eof
  87. )
  88. )
  89. set day=30
  90. )
  91. )
  92. 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_USERLINUX_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

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表