定期自动备份,备份文件很频繁,需要定期(1-2个月为宜)清理一些过于频繁的,然后做归档
暂定清理2个月前的备份,清理后,将保留的移到归档目录里,长期保留
暂定每个月保留两份,1日及16日左右
两个月内的备份,全部保留,以备不时之需
长期保留的归档,可以视情况再做精简清理。
定期选择部分下载异地备份
定期自动备份,备份文件很频繁,需要定期(1-2个月为宜)清理一些过于频繁的,然后做归档
暂定清理2个月前的备份,清理后,将保留的移到归档目录里,长期保留
暂定每个月保留两份,1日及16日左右
两个月内的备份,全部保留,以备不时之需
长期保留的归档,可以视情况再做精简清理。
定期选择部分下载异地备份
tar -cvf - /etc | tar -xvf - 其中 /etc 可以改成任何需要备份的目录
一个使用tar实现对目录作增量备份的bash脚本
#!/bin/bash #program: # auto backup the folder $to_backup # to $save_to # History: # 2012/11/28 yqf First release # do NOT change the variable $filename # except you REALY know what you are doing exactly filename=`date +%Y%m%d_%H%M%S` # sample # ##whitch folder you want to backup, full path (start with "/") #to_backup="/var/www/html/foo" # ##where you whant to save the backup files,folder, MUST end by "/" #save_to="/var/www/backup/foo/" # ##the incremental file, file name, full path #incremental_file="/var/www/backup/incremental_file/foo.incre" # #tar -g $incremental_file \ # ## each files or folders that no need to backup, (ingore), # ## [Careful] without end slash even folder # -C $to_backup \ # --exclude data/cache \ # --exclude data/tmp \ # -cpjf $save_to$filename.tar.bz2 . # sample end # # mysite.com to_backup="/var/www/html/mysite/html/" save_to="/home/myhome/backup/mysite/" incremental_file="/home/myhome/backup/incremenntal_list/mysite.increment_file" tar -g $incremental_file \ -C $to_backup \ --exclude data/static_cache \ --exclude data/templates_c \ --exclude data/templates_cache \ --exclude data/cache \ -cpjf $save_to$filename.tar.bz2 .
下载脚本附件 tar_incremental_backup_sample
其中....似乎很简单,不用说什么了
tar 增量备份打包目录,并分卷打包压缩(自动分割成多个文件)
tar -g /home/my_name/backup/incremenntal_list/my_website.incremenntal_list \ -C /var/www/html/ \ --exclude data/cache \ --exclude data/tmp \ -cpjvf - /var/www/html/ |split -b 2g
-g xxx 是增量日志文件,再次执行上面命令备份目录时,没有改变的文件将不备份,这样节省备份占用硬盘;需要还原时,同样要带上该参数,后边跟上该文件路径,而且要按备份的次序一个一个解包
--exclude xxx 是排除的目录,被tar忽略而不备份
split -b 2g 分割为2G的文件,分割文件名字将是 xaa, xab, xac ...
备份文件还原时,使用以下命令:
cat xaa xab xac >tar -xj
注意,1)省略了上述-g 参数,如果备份时用了这里就要带上。
2)假设只有三个分卷文件,如果不止三个,那就依次写出即可。事实上 cat `ls x*` >tar -xj 也可以,但如果`ls x*`出来的次序是乱的,那就要解包失败。
windows下备份目录是个蛋疼的事情,而linux的备份功能实在彪悍的让人感激涕零,然而对于出卖灵魂维护windows服务器的人士,在鄙视windows之余,还是得解决这个问题。突然想到cygwin这个强大的工具,是否可以在windows下使用它crond/crontab呢?查了一下,还真的有。
,先记来来,有时间研究一下
http://blog.csdn.net/cg_cheng/article/details/4377307 在cygwin下配置crontab
http://www.cnblogs.com/alaska1131/articles/1655643.html windows下启动cygwin的cron/crontab
tar命令的参数 -g, 后面跟一个文件路径,就可在该文件里记录下差异化日志记录,每次备份时带上该参数及文件路径,即是差异备份。还原时,也应该带上这个参数,否则,每次差异备份时删除的文件将不会自动删除。
tar命令的参数 --exclude=,后面跟一个文件路径(支持通配符),指备份时忽略指定的文件(包括目录),如有多个忽略文件,那就加多次该参数,每次指定一个忽略目录。
tar命令的-p参数,指打包时保留文件权限
需要还原文件时,就按备份的次序依次执行-x解包时,记得要带上-g参数,别忘了后面的差异化日志记录文件,这样每次备份时删除的文件也会自动在还原的目标目录里删除;当然你想保留所有文件时另说。
备份mysql的最简单方法是的使用phpMyAdmin的“导出”功能,导出成sql文件,不用管其它选项,只管导出就可以,这就是mysql标准的备份文件。
导出时,一般不要勾选压缩选项。因为如果备份文件大到一定程度,就会因为php分配不到足够内存而死掉;经验是50M以上的表,就不要压缩了。这是个蛋疼的事情:小文件不值得压缩,大了反而压缩不动。所以不压缩就是了。
要还原mysql数据库时,使用phpMyAdmin是个简单的方法,但更容易因为备份文件过大而超过php内存限制而死掉,这时你会有种痛不欲生的感觉。
推荐使用命令行连接mysql,以source命令导入还原,这个导入过程是件愉悦的事情。
不幸的是如果你在windows下,会比较啰嗦:
把你的mysql备份文件放到一个比较浅的目录里,比如放在 E:\120507.sql ,你要还原的数据库叫mydata
找到你的mysql安装在哪里,假如你的mysql安装在D:\Program Files\MySQL\MySQL Server 5.0 ,那么你的mysql命令行客户端将位于D:\Program Files\MySQL\MySQL Server 5.0\bin ,按着按下面的步骤来:
mysql备份,使用phpMyAdmin,导出需要的表,或整个数据库,注意最好不要勾选压缩
还原,使用命令行客户端连上mysql服务器,mysql -uroot -p123456 --default-character-set=utf8 --max_allowed_packet=16777216 --net_buffer_length=16384,然后use mydata进入需要还原的数据库,运行source x:\bakup_file.sql 导入备份。
mssql有命令行客户端工作,可以通过bat脚本调用命令行工具执行备份命令,这样还可以很方便的调用7z,(win)rar等来自动压缩,比mssql 自带的维护计划灵活多了。“维护计划”好像也可以调用压缩工具,只是要启用xp_cmd这个很风险的存储过程,让人不安心,所以一般不这么用,备份文件都是手工压缩再下载到本地存档备份。
MS sql 的官方命令行客户端叫sqlcmd,ms sql2005默认安装的,位于 X:\Program Files\Microsoft SQL Server\90\Tools\Binn ,该目录会被自动加入windows 的PATH环境变量中,所以可以直接调用,先看看基本的帮助文档:
C:\Documents and Settings\Administrator>sqlcmd /? Microsoft (R) SQL Server 命令行工具 版本 9.00.1399.06 NT INTEL X86 版权所有 (c) Microsoft Corporation。保留所有权利。 用法: Sqlcmd [-U 登录 ID] [-P 密码] [-S 服务器] [-H 主机名] [-E 可信连接] [-d 使用数据库名称] [-l 登录超时值] [-t 查询超时值] [-h 标题] [-s 列分隔符] [-w 屏幕宽度] [-a 数据包大小] [-e 回显输入] [-I 允许带引号的标识符] [-c 命令结束] [-L[c] 列出服务器[清除输出]] [-q "命令行查询"] [-Q "命令行查询" 并退出] [-m 错误级别] [-V 严重级别] [-W 删除尾随空格] [-u unicode 输出] [-r[0|1] 发送到 stderr 的消息] [-i 输入文件] [-o 输出文件] [-z 新密码] [-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出] [-k[1|2] 删除[替换]控制字符] [-y 可变长度类型显示宽度] [-Y 固定长度类型显示宽度] [-p[1] 打印统计信息[冒号格式]] [-R 使用客户端区域设置] [-b 出错时中止批处理] [-v 变量 = "值"...] [-A 专用管理连接] [-X[1] 禁用命令、启动脚本、环境变量[并退出]] [-x 禁用变量情况] [-? 显示语法摘要] C:\Documents and Settings\Administrator>
详细参数介绍可以参看这里: sql server 2005 使用命令行备份数据
C:\Documents and Settings\Administrator>sqlcmd -U sa -P sa -S localhost -Q "backup database foo to disk='f:\backup\foo_110630.bak'"
已为数据库 'foo',文件 'foo' (位于文件 1 上)处理了 5032 页。
已为数据库 'foo',文件 'foo_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 5033 页,花费 1.871 秒(22.036 MB/秒)。
一个比较完善的自动批处理脚本,可以同时备份并rar压缩多个数据库,可以按需要在此基础上修改改进。
@ECHO ON set d=%date:~0,10% set d=%d:-=% set t=%time:~0,8% set t=%t::=% set stamp=%p%%d%%t% set bakupfolder=F:\backup\ rem 1按子目录保存备份文件;0不按 set lay_in_subfolder=1 call :backupone foo call :backupone foo2 call :backupone foo3 call :backupone foo4 goto :EOF @ECHO OFF :backupone setlocal echo %1 set dbname=%1 if not exist %bakupfolder%%dbname% mkdir %bakupfolder%%dbname% if %lay_in_subfolder%==1 ( set subfolder=%dbname%\ )else set subfolder= rem echo %bakupfolder%%subfolder%%dbname%%stamp%.bak sqlcmd -U sa -P "sa" -S localhost -Q "backup database %dbname% to disk='%bakupfolder%%subfolder%%dbname%%stamp%.bak'" "C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%bakupfolder%%subfolder%%dbname%%stamp%".rar "%bakupfolder%%subfolder%%dbname%%stamp%.bak" endlocal&goto :EOF
脚本说明
1. set bakupfolder=F:\backup\
备份文件存放于目录F:\backup\ (此目录需要事先建好)
2. 默认每个数据库放置到bakupfolder下的同名的子目录(脚本自动创建)中;设置lay_in_subfolder=0后,将直接放置到bakupfolder
3. 备份文件名中自动添加备份时的时间字符串,不用担心备份目录下名字重复,也便于管理。
4. call :backupone foo
foo是需要备份的数据库,需要备份其它数据库,按同样的方式一行写一条即可
这是在批处理里中调用自定义函数
5. 命令行驱动备份操作:sqlcmd -U sa -P "sa" -S localhost -Q "xxx"
这里连接数据库的用户名密码都是sa,请改成你的实际用户名密码。mssql密码中如果有一些特殊字符,可能报错,所以加上双引号。如果密码简单,不加也可以;不过sa密码,一般都是很变态的吧~~
加到windows计划任务里,定期执行,是一个很好的主意。
上面脚本里,只对mssql数据库执行了备份的操作,如果加入整理索引碎片、重建索引等维护操作,也是很好的自动化维护方案。
这样处理,就可以弃用mssql自带的“维护计划”了。
------ 在windows2008下使用请参阅如下 ---- 20130723 补------------
windows 2008的命令行下,date输出的日期,默认使用/作为分隔符,这样上面的脚本就不行了,要把第三行 set d=%d:-=% 作下修改:
set d=%d:/=%
其它不用变。
ms sql server 2005维护计划(备份)失败:应用于目标服务器 对于 xx 失败,消息如下
而这个错误,又没有详细的说明,为什么失败,失败在哪里;不说明详细原因,这也是微软的产品经常让人很崩溃的重要原因之一。
网上也有人遇到这这种问题,只是找了个遍也都没有看到解决方法;不知道是否重启一下windows会不会好,但因为是生产环境的服务器,不便于重启。
突然想起命令行,命令行工具!mssql有命令行客户端工作,只是没有用过,应该可以通过bat脚本调用命令行工具执行备份命令,这样还可以很方便的调用7z,(win)rar等来自动压缩,比mssql 自带的维护计划灵活多了。“维护计划”好像也可以调用压缩工具,只是要启用xp_cmd这个很风险的存储过程,让人不安心,所以一般不这么用,备份文件都是手工压缩再下载到本地存档备份。
MS sql 的官方命令行客户端叫sqlcmd,ms sql2005默认安装的,位于 X:\Program Files\Microsoft SQL Server\90\Tools\Binn ,该目录会被自动加入windows 的PATH环境变量中,所以可以直接调用,先看看基本的帮助文档:
C:\Documents and Settings\Administrator>sqlcmd /? Microsoft (R) SQL Server 命令行工具 版本 9.00.1399.06 NT INTEL X86 版权所有 (c) Microsoft Corporation。保留所有权利。 用法: Sqlcmd [-U 登录 ID] [-P 密码] [-S 服务器] [-H 主机名] [-E 可信连接] [-d 使用数据库名称] [-l 登录超时值] [-t 查询超时值] [-h 标题] [-s 列分隔符] [-w 屏幕宽度] [-a 数据包大小] [-e 回显输入] [-I 允许带引号的标识符] [-c 命令结束] [-L[c] 列出服务器[清除输出]] [-q "命令行查询"] [-Q "命令行查询" 并退出] [-m 错误级别] [-V 严重级别] [-W 删除尾随空格] [-u unicode 输出] [-r[0|1] 发送到 stderr 的消息] [-i 输入文件] [-o 输出文件] [-z 新密码] [-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出] [-k[1|2] 删除[替换]控制字符] [-y 可变长度类型显示宽度] [-Y 固定长度类型显示宽度] [-p[1] 打印统计信息[冒号格式]] [-R 使用客户端区域设置] [-b 出错时中止批处理] [-v 变量 = "值"...] [-A 专用管理连接] [-X[1] 禁用命令、启动脚本、环境变量[并退出]] [-x 禁用变量情况] [-? 显示语法摘要] C:\Documents and Settings\Administrator>
详细参数介绍可以参看这里: sql server 2005 使用命令行备份数据
C:\Documents and Settings\Administrator>sqlcmd -U sa -P sa -S localhost -Q "backup database foo to disk='f:\backup\foo_110630.bak'"
已为数据库 'foo',文件 'foo' (位于文件 1 上)处理了 5032 页。
已为数据库 'foo',文件 'foo_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 5033 页,花费 1.871 秒(22.036 MB/秒)。
一个比较完善的自动批处理脚本,可以同时备份并rar压缩多个数据库,可以按需要在此基础上修改改进。
@ECHO ON set d=%date:~0,10% set d=%d:-=% set t=%time:~0,8% set t=%t::=% set stamp=%p%%d%%t% set bakupfolder=F:\backup\ rem 1按子目录保存备份文件;0不按 set lay_in_subfolder=1 call :backupone foo call :backupone foo2 call :backupone foo3 call :backupone foo4 goto :EOF @ECHO OFF :backupone setlocal echo %1 set dbname=%1 if not exist %bakupfolder%%dbname% mkdir %bakupfolder%%dbname% if %lay_in_subfolder%==1 ( set subfolder=%dbname%\ )else set subfolder= rem echo %bakupfolder%%subfolder%%dbname%%stamp%.bak sqlcmd -U sa -P "sa" -S localhost -Q "backup database %dbname% to disk='%bakupfolder%%subfolder%%dbname%%stamp%.bak'" "C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%bakupfolder%%subfolder%%dbname%%stamp%".rar "%bakupfolder%%subfolder%%dbname%%stamp%.bak" endlocal&goto :EOF
脚本说明
1. set bakupfolder=F:\backup\
备份文件存放于目录F:\backup\ (此目录需要事先建好)
2. 默认每个数据库放置到bakupfolder下的同名的子目录(脚本自动创建)中;设置lay_in_subfolder=0后,将直接放置到bakupfolder
3. 备份文件名中自动添加备份时的时间字符串,不用担心备份目录下名字重复,也便于管理。
4. call :backupone foo
foo是需要备份的数据库,需要备份其它数据库,按同样的方式一行写一条即可
这是在批处理里中调用自定义函数
5. 命令行驱动备份操作:sqlcmd -U sa -P "sa" -S localhost -Q "xxx"
这里连接数据库的用户名密码都是sa,请改成你的实际用户名密码。mssql密码中如果有一些特殊字符,可能报错,所以加上双引号。如果密码简单,不加也可以;不过sa密码,一般都是很变态的吧~~
加到windows计划任务里,定期执行,是一个很好的主意。
上面脚本里,只对mssql数据库执行了备份的操作,如果加入整理索引碎片、重建索引等维护操作,也是很好的自动化维护方案。
这样处理,就可以弃用mssql自带的“维护计划”了。
工作环境 Windows Server 2003 ,MySQL安装目录 D:\Program Files\MySQL\MySQL Server 5.0 , WinRAR 安装目录 C:\Program Files\WinRAR
备份数据存储的路径为 E:\dataBackup\MySQL .下面即是windows命令行批处理命令的源文件
代码如下:
set d=%date:~0,10% set d=%d:-=% set t=%time:~0,8% set t=%t::=% set dzxpath=dzx%p%%d%%t%.sql set ucpath=uc%p%%d%%t%.sql set folder=E:\dataBackup\MySQL\ echo off"D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -uroot -pyoumysqlrootpassword discuzx > "%folder%%dzxpath%""C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%dzxpath%".rar "%folder%%dzxpath%""D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -uroot -pyoumysqlrootpassword discuzuc uc_admins uc_applications uc_badwords uc_domains uc_failedlogins uc_feeds uc_friends uc_mailqueue uc_memberfields uc_members uc_mergemembers uc_newpm uc_notelist uc_pms uc_protectedmembers uc_settings uc_sqlcache uc_tags uc_vars > "%folder%%ucpath%""C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%ucpath%".rar "%folder%%dzxpath%"rem echo "D:\Program Files\MySQL\MySQL Server 5.0\data\discuzx\%filepath%""D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -e --max_allowed_packet=1048576 --net_buffer_length=16384 -uroot -pyourrootpasswd discuzx > "%folder%%dzxpath%" rem "C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%dzxpath%".rar "%folder%%dzxpath%" "D:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" -hlocalhost --opt -e --max_allowed_packet=1048576 --net_buffer_length=16384 -uroot -pyourrootpassw mydb > "%folder%%mydbpath%" "C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%folder%%mydbpath%".rar "%folder%%mydbpath%" "%folder%%dzxpath%" rem echo "D:\Program Files\MySQL\MySQL Server 5.0\data\discuzx\%filepath%" rem pause
----------------------
这里需要使用winrar,假定安装在 C:\Program Files\WinRAR\ 上面代码里使用的是 rar.exe 这个命令行版的rar工具(推荐),而不是winrar.exe这个图形化版本。当然要检查你的winrar安装目录里是否有rar.exe这个文件,如果没有,建议重新下载完整版的winrar.
这里假定需要备份数据库discuzx与discuzuc中的几个表(ucenter表) [如果升级安装discuzx,而又没有把ucenter导入discuzx的库里,就是这种情况]
把上面的命令保存为 mysql_dump.bat ,双击即可运行。为了实现无人值守的自动化处理,可以通过系统的任务计划定期执行这个命令。
如不会windows任务计划请自行搜索学习,这里恕不赘述。