C# Mysql数据库备份、还原(MVC)
一、准备工作
1.电脑上要安装上mysql,并且已经配置好了环境变量。
二、公共代码
1.配置文件(该节点只是为备份、还原使用,数据库连接字符串有另外的节点)
<connectionStrings>
<add name="DapperConnection" connectionString="Database=testDta;data source=127.0.0.1;User Id=test;Password=123456;CharSet=utf8;port=3306" />
</connectionStrings>
2.获取数据库配置信息(全局变量)
//Mysql数据库连接字符串
static string dapperConnStr = ConfigurationManager.ConnectionStrings["DapperConnection"].ToString();
static string[] connArray = dapperConnStr.Split(';');
//获取Mysql的ip地址
static string ip = connArray[].Substring(connArray[].IndexOf('=') + );
//获取Mysql的用户名
static string user = connArray[].Substring(connArray[].IndexOf('=') + );
//获取Mysql的密码
static string password = connArray[].Substring(connArray[].IndexOf('=') + );
static string port = connArray[].Substring(connArray[].IndexOf('=') + );
//获取数据库
static string database = connArray[].Substring(connArray[].IndexOf('=') + );
3.执行命令代码
/// <summary>
/// 命令行操作
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
private string RunCmd(string command)
{
Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; //确定程序名
p.StartInfo.Arguments = "/c " + command; //确定程式命令行
p.StartInfo.UseShellExecute = false; //Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向输入
p.StartInfo.RedirectStandardOutput = true; //重定向输出
p.StartInfo.RedirectStandardError = true; //重定向输出错误
p.StartInfo.CreateNoWindow = true; //设置置不显示示窗口 //mySql安装路径
string mysqlPath = GetMysqlPath() + "bin";
p.StartInfo.WorkingDirectory = mysqlPath;
p.Start(); p.StandardInput.WriteLine(command); //输入入要行的命令 p.StandardInput.WriteLine("exit"); //退出
return p.StandardError.ReadToEnd();
}
4.获取mysql安装路径
/// <summary>
/// 获取MySql安装路径
/// </summary>
/// <returns></returns>
private string GetMysqlPath()
{
IDbConnection conn = new MySqlConnection(dapperConnStr); string strsql = "select @@basedir as basePath from dual ";
string strPath = conn.Query<string>(strsql).FirstOrDefault();
var o=conn.ExecuteScalar(strsql);
strPath = strPath.Replace("/", "\\");
return strPath;
}
三、备份代码
/// <summary>
/// 生成备份文件
/// </summary>
/// <returns></returns>
public ActionResult GenerateBackups()
{
try
{
using (NetEntities et = new NetEntities())
{
string fileName = Request["fileName"] + ".sql";
//此处需要查询数据库,以确保数据库名称的唯一性,省略
//还原数据库命令行示例:mysqldump -h 127.0.0.1 -utest -p123456 testDta > E:\\work\\download\\Database_Backup\\test.sql
string sqlAddress = "-h " + ip + " -u" + user + " -p" + password + " " + database;
using (SaveFileDialog sfd = new SaveFileDialog())
{
sfd.Filter = "数据库文件|*.sql";
sfd.FilterIndex = ;
sfd.RestoreDirectory = true;
sfd.FileName = fileName; string filePath = sfd.FileName;
string path = AppDomain.CurrentDomain.BaseDirectory + "download\\Database_Backup\\";
string cmd = "mysqldump " + sqlAddress + " > " + path + filePath + "";
string result = RunCmd(cmd); }
return Json("备份成功");
}
}
catch (Exception ex)
{
return Json("程序异常---"+ex.Message);
}
}
四、还原代码
/// <summary>
/// 还原备份
/// </summary>
/// <param name="fileName">备份数据库的名称</param>
/// <returns></returns>
public ActionResult RecoveryBackups(string fileName)
{
Response<string> _rsp = new Response<string>();
try
{
using (NetEntities et = new NetEntities())
{
StringBuilder sbcommand = new StringBuilder(); OpenFileDialog openFileDialog = new OpenFileDialog(); string directory = AppDomain.CurrentDomain.BaseDirectory + PublicInfo.Database_Backup + fileName;
//在文件路径后面加上""避免空格出现异常
//命令行完整示例:mysql --host=127.0.0.1 --default-character-set=utf8 --port=3306 --user=test --password=123456 testDta<E:\\work\\download\\Database_Backup\\test.sql
//命令(缩减)示例:mysql --host=10.10.50.23 --user=test --password=123456 testDta<E:\\work\\download\\Database_Backup\\test.sql(因为有些在my.ini文件中已经配置了默认项)
sbcommand.AppendFormat("mysql --host=" + ip + " --user=" + user + " --password=" + password + " " + database + "" + " <{0}", directory);
string command = sbcommand.ToString();
RunCmd(command);
_rsp.code = (int)EnumCode.调用成功;
_rsp.sub_msg = "还原成功"; return Json(_rsp);
}
}
catch (Exception ex)
{
_rsp.code = (int)EnumCode.程序异常;
_rsp.sub_msg = ex.Message;
LogHelper.WriteLog(classname, "RecoveryBackups", ex);
return Json(_rsp);
}
}
五、小结
1.我是在命令行输入命令,如果成功了之后,再去程序中进行拼写。
C# Mysql数据库备份、还原(MVC)的更多相关文章
- MySQL数据库备份还原(基于binlog的增量备份)
MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份 增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...
- MySQL数据库备份还原
本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...
- 使用mysqldump进行mysql数据库备份还原
mysqldump是mysql自带的备份还原工具,默认在安装目录的bin下 可通过cmd命令行启动,然后运行: 还原一个数据库: mysql -h 主机 -u 用户名 -p密码 数据库名 < 指 ...
- Linux下的Mysql数据库备份+还原
数据库备份: root@debian-mm:/home/debian-mm# mysqldump -u root -p Account > Account.sql Enter password: ...
- 阿里云mysql数据库备份还原
1.下载备份包 在rds的备份恢复中点击下载,在弹出的窗口中复制内网下载地址(前提是目标服务器与rds内网互通,否则请复制外网地址) 在目标服务器中执行如下命令进行下载: wget -c '复制的地址 ...
- [MySql] - 数据库备份还原
导出数据库到SQL方法: mysqldump.exe -u[USERNAME] -p[PASSWORD] -h [IP] jira --lock-all-tables > c:\db.sql m ...
- c#mysql数据库备份还原
1:引用dll MySql.Data.dll, MySqlbackup.dll 2:建一个数据连接静态类 public static class mysql { public static str ...
- mysql 数据库 备份 还原
参考资料: http://blog.51yip.com/mysql/139.html
- MySQL数据库备份和还原的常用命令
其实很多情况下mysql备份就是采用了这些命令,例如: mysql导入和导出数据 linux自动定时备份web程序和mysql数据库 备份MySQL数据库的命令 mysqldump -hhostnam ...
- Mysql数据库备份和还原常用的命令
Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...
随机推荐
- scikit-leanr 库中的 make_blobs() 函数
sklearn.datasets.make_blobs() 是用于创建多类单标签数据集的函数,它为每个类分配一个或多个正态分布的点集. sklearn.datasets.make_blobs( n_s ...
- wordpress如何添加自增变量(第一篇文章显示摘要后面的只显示标题)
有时我们在调用文章列表的时候需要在前面添加序号看起来比较整齐,如何实现呢?要想精确的控制每篇文章,我们先在循环前定义一个变量 $ashu_i=1 来计数,变量名随便,然后每循环一次,$ashu_i加1 ...
- wordpress怎么用AMP加速器呢
AMP项目(Accelerated Mobile Pages)是一个开放源代码计划,旨在为所有人打造更好的网络体验.借助该项目,用户可以打造出在各种设备和分发平台上都能始终如一地快速加载且效果出色的精 ...
- JDBC连接池的九种查询
package JDBC_Demo; import java.sql.SQLException; import java.util.List; import java.util.Map; import ...
- bootstrap ui样例
http://demo.codedefault.com/demo/ui/theadmin/samples/invoicer/settings.html
- VS中的Modules窗口
当我在别人的机器上调试问题时,我做的第一件事就是查看modules窗口.按版本排序并看到一个不属于的dll可以帮助立即诊断配置问题,并节省许多调试痛苦. 下面介绍下各列的意思: Name:模块名称. ...
- 2015-2016 ACM ICPC Baltic Selection Contest D - Journey(广搜)
- 使用plv8+ shortid npm包构建一个短唯一id服务
plv8 是一个很强大的pg 扩展插件,我们可以直接额使用js 增强sql ,shortid 是一个用来生成短连接id 很方便的类库 因为shortid 是一个npm 模块,我们需要使用一种方法使用r ...
- ESA2GJK1DH1K基础篇: 来吧! 彻底了解一下MQTT
首先你需要知道MQTT并不是什么高大上的事物,它只是一个软件,对就是一个软件.其实就是个TCP服务器 一,既然是TCP服务器,这个TCP服务器和咱平时做的有什么不一样呢. 首先,平时的时候咱做的TCP ...
- contest5 CF991 div2 ooooxx ooooox ooooox
题意 div2D 给出一个棋盘, 有一些点不能放, 总共\(2\)排, 长度\(n(\le 100)\) 在上面空位摆放\('L'\)字形的牌, 问最多能放几个 例如: 00X00X0XXX0 0XX ...