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数据库备份和还原的操作,下 ...
随机推荐
- 将qemu使用的设备树dump出来
像下面的qemu启动命令: sudo qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -smp \ -m 4096M \ -kernel ./lin ...
- NOIp常用的算法
24种NOIp常用的算法 https://blog.csdn.net/weixin_40676873/article/details/81166139 NOIP 算法总结(来自 啊哈磊的专栏) htt ...
- css之单行缩略..以及多行缩略
html单行缩略方法 .oneline { white-space: nowrap; //强制文本在一行内输出 overflow: hidden; //隐藏溢出部分 text-overflow: el ...
- flask实战-个人博客-编写博客前台
编写博客前台 博客前台需要开放给所有用户,这里包括显示文章列表.博客信息.文章内容和评论等功能功能. 分页显示文章列表 为了在主页显示文章列表,我们要先在渲染主页模板的index视图的数据库中获取所有 ...
- 学习:CC断点
断点介绍: shark恒老师说有四种说法,但是其实都是相同的 第一个读法:普通断点 第二个读法:F2断点 第三个读法:INT3断点( int3其实就是汇编指令 ) 第四个读法:CC断点 (CC其实就是 ...
- Anaconda3(2)Anaconda3中安装TensorFlow
https://zhuanlan.zhihu.com/p/34730661 1. 安装anaconda3:自行下载.安装[注意版本] (可参考引用链接) 2. 搭建TensorFlow环境 cuda1 ...
- springboot使用thymeleaf模板问题
返回 org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/implementsfun/index] ...
- ESA2GJK1DH1K基础篇: Android实现SmartConfig简单Demo
下载源码去 百度安信可 导入源码 等待加载完 我的提示更新下软件 ,我就更新下 安装完成以后重新导入工程 安装到手机 注意,由于Android 9.0 以后的获取WIFI名称需要打开GPS,所以如果提 ...
- ESA2GJK1DH1K升级篇: 升级STM32 预热: 单片机定时 使用 http 获取云端文本文件里面的内容,然后显示在液晶屏
前言: 实现功能概要 STM32使用AT指令控制Wi-Fi以TCP方式连接咱上节安装的Web服务器,然后使用http的get协议获取云端文本文件里面的内容, 然后把获取的数据显示在OLED液晶屏. ...
- BFS实现8数码问题,思考与总结
BFS实现8数码问题,思考与总结 今天中午学习了二叉树的线索化与线索化遍历,突然有一种想实现八数码问题的冲动,因为它的初级解决方式是BFS(广度优先搜索算法).于是我开始编程. 没想到一编就是一个下午 ...