远程备份要注意权限的问题,普通的访问帐户没有备份和还原的权限,最好用sa的帐户,并且程序访问的帐户必须添加到远程机器的系统内
你说的远程备份到本地是不可能的,你只有开放远程某个文件夹加入你的特殊访问帐户权限
最好直接用远程桌面,这样最方便
方法一(不使用SQLDMO):
///
///备份方法
///
SqlConnection conn = new SqlConnection("Server=;Database=master;User ID=sa;Password=sa;");
SqlCommand cmdBK = new SqlCommand();
cmdBKCommandType = CommandTypeText;
cmdBKConnection = conn;
cmdBKCommandText = @"backup database test to disk='C:\ba' with init";
try
{
connOpen();
cmdBKExecuteNonQuery();
MessageBoxShow("Backup successed");
}
catch(Exception ex)
{
MessageBoxShow(exMessage);
}
finally
{
connClose();
connDispose();
}
///
///还原方法
///
SqlConnection conn = new SqlConnection("Server=;Database=master;User ID=sa;Password=sa;Trusted_Connection=False");
connOpen();
//KILL DataBase Process
SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocessesdbid=sysdatabasesdbid AND sysdatabasesName='test'", conn);
SqlDataReader dr;
dr = cmdExecuteReader();
ArrayList list = new ArrayList();
while(drRead())
{
listAdd(drGetInt16(0));
}
drClose();
for(int i = 0; i < listCount; i++)
{
cmd = new SqlCommand(stringFormat("KILL {0}", list[i]), conn);
cmdExecuteNonQuery();
}
SqlCommand cmdRT = new SqlCommand();
cmdRTCommandType = CommandTypeText;
cmdRTConnection = conn;
cmdRTCommandText = @"restore database test from disk='C:\ba'";
try
{
cmdRTExecuteNonQuery();
MessageBoxShow("Restore successed");
}
catch(Exception ex)
{
MessageBoxShow(exMessage);
}
finally
{
connClose();
}
方法二(使用SQLDMO):
///
///备份方法
///
SQLDMOBackup backup = new SQLDMOBackupClass();
SQLDMOSQLServer server = new SQLDMOSQLServerClass();
//显示进度条
SQLDMOBackupSink_PercentCompleteEventHandler progress = new SQLDMOBackupSink_PercentCompleteEventHandler(Step);
backupPercentComplete += progress;
try
{
serverLoginSecure = false;
serverConnect("", "sa", "sa");
backupAction = SQLDMOSQLDMO_BACKUP_TYPESQLDMOBackup_Database;
backupDatabase = "test";
backupFiles = @"D:\test\myProg\backupTest";
backupBackupSetName = "test";
backupBackupSetDescription = "Backup the database of test";
backupInitialize = true;
backupSQLBackup(server);
MessageBoxShow("Backup successed");
}
catch(Exception ex)
{
MessageBoxShow(exMessage);
}
finally
{
serverDisConnect();
}
thispbDBValue = 0;
///
///还原方法
///
SQLDMORestore restore = new SQLDMORestoreClass();
SQLDMOSQLServer server = new SQLDMOSQLServerClass();
//显示进度条
SQLDMORestoreSink_PercentCompleteEventHandler progress = new SQLDMORestoreSink_PercentCompleteEventHandler(Step);
restorePercentComplete += progress;
//KILL DataBase Process
SqlConnection conn = new SqlConnection("Server=;Database=master;User ID=sa;Password=sa;Trusted_Connection=False");
connOpen();
SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocessesdbid=sysdatabasesdbid AND sysdatabasesName='test'", conn);
SqlDataReader dr;
dr = cmdExecuteReader();
ArrayList list = new ArrayList();
while(drRead())
{
listAdd(drGetInt16(0));
}
drClose();
for(int i = 0; i < listCount; i++)
{
cmd = new SqlCommand(stringFormat("KILL {0}", list[i]), conn);
cmdExecuteNonQuery();
}
connClose();
try
{
serverLoginSecure = false;
serverConnect("", "sa", "sa");
restoreAction = SQLDMOSQLDMO_RESTORE_TYPESQLDMORestore_Database;
restoreDatabase = "test";
restoreFiles = @"D:\test\myProg\backupTest";
restoreFileNumber = 1;
restoreReplaceDatabase = true;
restoreSQLRestore(server);
MessageBoxShow("Restore successed");
}
catch(Exception ex)
{
MessageBoxShow(exMessage);
}
finally
{
serverDisConnect();
}
thispbDBValue = 0;补充;
进入域名后台管理,添加2个A记录,当访问该域名时,随机解析,实现负载平衡,
可以做一个主引导页面,比如电信线路,网通线路选择点击
你的问题很高深,不知道这个办法行吗
“其中一组故障” 是服务器当机 还是网络线路出现问题?
可以指定域名解析多个ip 这个 可以找域名提供商解决
也可以做一个自动判断网速的跳转页面 根据网速自动选择线路创建脚本/root/script/backupsh
# 该脚本应用于10多台普通的Linux应用服务器,多年来从未出过差错。
# 数据库备份较为特殊,这里不包含数据库备份。
# 因为脚本中含有FTP密码,所以FTP仅给予写权限较为安全,FTP中的老备份的定期删除任务由FTP服务器完成。
# 备份加入到自动任务中,每周六23:00执行,并写入日志,如下:
# 追加下面语句到/etc/crontab中
# 0 23 6 root /root/script/backupsh >> /root/script/backuplog 2>&1
#有注释版:
#!/bin/bash
#=====================================================
#author zhaoyn
#date 2010/12/31
#=====================================================
#参数设定
basedir=/opt/backup #备份存放的目录
days=15 #备份在本地保留天数
bakfiles="/root/script /etc" #需要备份的目录或文件,请不要使用快捷方式或通配符
ftpip=XXXXXXXXXXXX #异地备份的FTP地址
ftpuser='username' #异地备份的FTP用户名
ftppw='password' #异地备份的FTP密码
echo =====================================================
date
cd $basedir
#删除备份目录中15天以前备份文件,不包含子目录
find -maxdepth 1 -name "tgz" -mtime +"$days" -exec rm -f {} \;
for bakfile in $bakfiles
do
file=`basename $bakfile`
#压缩打包需要备份的目录,包括权限,文件命名包含当前时间
tar -czpf "$file"_$(date +%Y%m%d-%H%M)tgz $bakfile
#大文件打包前后,缓解磁盘压力,降低I/O错误概率
sleep 10s ;sync;sync
done
#通过FTP上传当天备份的文件到异地
ftp -v -n -i $ftpip <<END
user $ftpuser $ftppw
bin
mput $(date +%Y%m%d)tgz
bye
END
#无注释版:
#!/bin/bash
#=====================================================
#author zhaoyn
#date 2010/12/31
#=====================================================
basedir=/opt/backup
days=15
bakfiles="/root/script /etc"
ftpip=XXXXXXXXXXXX
ftpuser='username'
ftppw='password'
echo =====================================================
date
cd $basedir
find -maxdepth 1 -name "tgz" -mtime +"$days" -exec rm -f {} \;
for bakfile in $bakfiles
do
file=`basename $bakfile`
tar -czpf "$file"_$(date +%Y%m%d-%H%M)tgz $bakfile
sleep 10s ;sync;sync
done
ftp -v -n -i $ftpip <<END
user $ftpuser $ftppw
bin
mput $(date +%Y%m%d)tgz
bye
END
Mysql的备份,如果凌晨可以停止几分钟,那么强烈建议对Mysql执行物理备份,脚本如下
#!/bin/bash
#History
#=====================================================
#When Who What
#2010/3/24 Zhaoyn Create
#
#=====================================================
basedir=/opt/backup
updir=$basedir/updir
timenow=$(date +%Y%m%d-%H%M)
# 删除mysql十四天前的数据,注意,这里仅删除了mysql的tgz文件。
rm -f `find $basedir -name "mysqltgz" -mtime +14`
# 由于数据库在有连接的情况下,直接对数据文件打包是可能出问题的,所以这里我们在打包前要停用数据库,这样直接对数据文件打包,恢复时只需解压数据文件到新环境相应的目录即可,默认是/var/lib/mysql
# 如果白天也要进行数据库备份,请使用mysqldump命令,进行在线备份。恢复也挺方便的。
/etc/rcd/initd/mysqld stop
sleep 5s ;sync;sync
tar -czpf $basedir/mysql$timenowtgz /var/lib/mysql
/etc/rcd/initd/mysqld start
#=====================================================
附件中的脚本文件是有DOS换行符(CR/LF)的,复制文件中的内容到SSH客户端没有问题,如果直接拷贝文件到Linux系统中,可先运行下面的命令:
mv txt sh
dos2unix sh
使用多备份客户端可以对服务器硬盘进行自动备份
首先进入多备份控制面板。首次进入有保护设备选项,选择保护服务器,非首次进入直接点击左下角下载客户端
下载客户端以后打开dbfenexe,然后登陆账户并选择首次备份。
选择以后点击文件左侧的按钮,然后勾选要保护的数据所在的目录,最后创建任务即可对服务器的硬盘进行备份
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)