sqlserver脚本备份固定多个数据库

sqlserver脚本备份固定多个数据库,第1张

1.用SqlServer的维护计划

在这里我就不给截图演示了,这个比较简单,无非就是通过sqlserver自己的维护计划拖拽出2个一个‘备份数据库'任务和一个‘清除维护'任务。

需要注意的点:

1)有备份任务里边选择备份的库尽量选‘所有用户数据库'这项,以免选择了特定数据库备份以后某天添加了新数据库却忘了勾选导致丢备份。

2)选项验证备份集完整性和压缩备份尽量都选上。

3)备份的路径尽量别选磁盘根目录

2.通过脚本+作业的方式备份数据库(非xp_cmdshell)。如果是多个库的话自己写个游标用动态sql的方式即可实现多库备份,我这里就提供个思路偷懒就不整理了。

复制代码 代码如下:

DECLARE @filename VARCHAR(500)

DECLARE @date DATETIME

DECLARE @OLD_DATE DATETIME

SET @date=GETDATE()

SET @OLD_DATE=GETDATE()-5 --超过5天的备份即将被删除

SET @FILENAME = 'E:\存放位置\数据库名称-'+CAST(DATEPART(YYYY,@DATE) AS VARCHAR(10))+'-'+CAST(DATEPART(MM,@DATE) AS VARCHAR(10))+'-'+CAST(DATEPART(DD,@DATE) AS VARCHAR(10))+'.BAK'

BACKUP DATABASE [数据库名称] TO DISK = @filename WITH COMPRESSION

EXECUTE master.dbo.xp_delete_file 0,N'E:\存放位置',N'bak',@OLD_DATE,1

GO

3.通过脚本+作业的方式备份数据库(用xp_cmdshell),如果你觉得你们服务器的网络、代码、以及防火墙足够安全可以开启xp_cmdshell的方式来备份。

如果数据库没开启xp_cmdshell的功能需要用以下脚本开通此功能,开通以后记得关闭sp_configure。

复制代码 代码如下:

USE Master

GO

EXEC sp_configure 'show advanced options', 1

我以前备份都使用mysqldump 导成文本文件便于存放 但是速度很慢的 最快的备份方法当然是直接把数据目录copy一份了 但是一般来说 都要关闭 MySQL的服务才能做 不然在你copy的时候刚好还有人读写表那麻烦就大了 这次朋友介绍我使用mysqlhotcopy 就相当于上面 不过他可以热备份 他备份非常快 我测试一个 G的mysql他备份的时间在 分钟内完成

下面是它的介绍

mysqlhotcopy是一个Perl脚本 最初由Tim Bunce编写并提供 它使用LOCK TABLES FLUSH TABLES和cp或scp来快速备份数据库 它是备份数据库或单个表的最快的途径 但它只能运行在数据库目录所在的机器上 mysqlhotcopy只用于备份MyISAM 它运行在Unix和NetWare中

使用方法见下面的脚本 加入crotab中吧

#!/bin/sh    # Name:mysqlbackup sh    # PS:MySQL DataBase Backup Use mysqlhotcopy script     # Last Modify:     # 定义变量 请根据具体情况修改    # 定义脚本所在目录    scriptsDir=`pwd`

# 数据库的数据目录    dataDir=/var/lib/mysql

# 数据备份目录    tmpBackupDir=/tmp/mysqlblackup    backupDir=/backup/mysql

# 用来备份数据库的用户名和密码    mysqlUser=root    mysqlPWD= you password

# 如果临时备份目录存在 清空它 如果不存在则创建它    if [[ e $tmpBackupDir ]]then      rm rf $tmpBackupDir/*    else      mkdir $tmpBackupDir    fi

# 如果备份目录不存在则创建它    if [[ ! e $backupDir ]]then      mkdir $backupDir    fi

# 得到数据库备份列表 在此可以过滤不想备份的数据库    for databases in `find $dataDir type d | \      sed e s/\/var\/lib\/mysql\/// | \      sed e s/test// `do      if [[ $databases == ]]then        continue      else

# 备份数据库    /usr/bin/mysqlhotcopy user=$mysqlUser password=$mysqlPWD q $databases $tmpBackupDir        dateTime=`date +%Y %m %d %H:%M:%S `        echo $dateTime Database:$databases backup success! >>MySQLBackup log      fi    done

# 压缩备份文件    date=`date I`    cd $tmpBackupDir    tar czf $backupDir/mysql $date tar gz /

#End完成

加入到crontab中设置每周 运行    * * /backup/blackup sh

注意:恢复数据库到备份时的状态

mysqlhotcopy 备份出来的是整个数据库目录 使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /var/lib/mysql/)目录下即可 同时要注意权限的问题 如下例

shell>cp rf db_name /var/lib/mysql/

shell>chown R mysql:mysql /var/lib/mysql/ (将 db_name 目录的属主改成 mysqld 运行用户)

本套备份策略只能恢复数据库到最后一次备份时的状态 要想在崩溃时丢失的数据尽量少应该更频繁的进行备份 要想恢复数据到崩溃时的状态请使用主从复制机制(replication)

小技巧:

不想写密码在shell中的话 可以在root的home目录下建立一个f文件 以便让mysqlhotcopy从中读取用户名/密码     [mysqlhotcopy]    user=root    password=YourPassword    然后安全起见 chmod一下     chmod ~/f

附:mysqlhotcopy常用参数

·     allowold  如果目标存在不放弃(加上一个_old后缀重新命名它)     ·     checkpoint=db_name tbl_name 在指定的db_name tbl_name插入检查点条目     ·     debug   启用调试输出     ·     dryrun n  报告动作而不执行它们     ·     flushlog  所有表锁定后刷新日志     ·     keepold   完成后不删除以前(重新命名的)的目标     ·     method=mand  复制方法(cp或scp)     ·     noindices  备份中不包括全部索引文件 这样使备份更小 更快 可以在以后用myisamc rq重新构建索引     ·     password=password p password 当连接服务器时使用的密码 请注意该选项的密码值是不可选的 不象其它MySQL程序     ·     port=port_num P port_num 当连接本地服务器时使用的TCP/IP端口号     ·     quiet q  除了出现错误时保持沉默     ·     regexp=expr  复制所有数据库名匹配给出的正则表达式的数据库     ·     socket=path S path 用于连接的Unix套接字文件     ·     suffix=str  所复制的数据库名的后缀     ·     tmpdir=path  临时目录(代替/tmp)     ·     user=user_name u user_name 当连接服务器时使用的MySQL用户名

lishixinzhi/Article/program/MySQL/201311/29401

经常会有定时备份SQL

Server数据库的需要。定时备份到本机的话,还是挺容易的,计划任务就可以完成,但如果是整机挂了,那备份到本机是没意义的,那么就需要来考虑备份到局域网中,其它电脑里。

下面就分享一份在网上找了之后,自己再简单整理过的代码,配合

SQL

Server

代理中的作业功能,已经稳定运行一个星期了,每小时就备份一次。

复制代码

代码如下:

--

创建网络映射(Y是盘符;IP地址后面要带共享文件夹的名称;password是密码,双引号引起;account是远程电脑的登录名)

exec

master..xp_cmdshell

'net

use

Y:

\\192.168.0.69\sqlbackup

"password"

/user:192.168.0.69\account'

--

按日期时间做文件名(注意路径中的文件夹,需要先建立好)

declare

@filename

varchar(200)

select

@filename

=

'Y:\DB\'

+

replace(replace(replace(CONVERT(varchar,

getdate(),

120

),'-',''),'

','-'),':','')

+

'.bak'

--

执行备份(DB是要备份的数据库名称)

backup

database

[DB]

to

disk

=

@filename

--

删除网络映射(Y是盘符,同上)

exec

master..xp_cmdshell

'net

use

Y:

/delete'


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9542254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存