一、准备工作

  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)的更多相关文章

  1. MySQL数据库备份还原(基于binlog的增量备份)

    MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份      增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...

  2. MySQL数据库备份还原

    本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...

  3. 使用mysqldump进行mysql数据库备份还原

    mysqldump是mysql自带的备份还原工具,默认在安装目录的bin下 可通过cmd命令行启动,然后运行: 还原一个数据库: mysql -h 主机 -u 用户名 -p密码 数据库名 < 指 ...

  4. Linux下的Mysql数据库备份+还原

    数据库备份: root@debian-mm:/home/debian-mm# mysqldump -u root -p Account > Account.sql Enter password: ...

  5. 阿里云mysql数据库备份还原

    1.下载备份包 在rds的备份恢复中点击下载,在弹出的窗口中复制内网下载地址(前提是目标服务器与rds内网互通,否则请复制外网地址) 在目标服务器中执行如下命令进行下载: wget -c '复制的地址 ...

  6. [MySql] - 数据库备份还原

    导出数据库到SQL方法: mysqldump.exe -u[USERNAME] -p[PASSWORD] -h [IP] jira --lock-all-tables > c:\db.sql m ...

  7. c#mysql数据库备份还原

    1:引用dll MySql.Data.dll,   MySqlbackup.dll 2:建一个数据连接静态类 public static class mysql { public static str ...

  8. mysql 数据库 备份 还原

    参考资料: http://blog.51yip.com/mysql/139.html

  9. MySQL数据库备份和还原的常用命令

    其实很多情况下mysql备份就是采用了这些命令,例如: mysql导入和导出数据 linux自动定时备份web程序和mysql数据库 备份MySQL数据库的命令 mysqldump -hhostnam ...

  10. Mysql数据库备份和还原常用的命令

    Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...

随机推荐

  1. nmap指令

    -sP  主机发现    -p  端口扫描(可区域)  -sV  端口(服务版本信息)-O  操作系统-iL  使用列表里的IP.(快捷方便)-iR  对公网上的随机n个IP.--excludeile ...

  2. 【HttpServlet】HttpServlet类

    创建时间:6.15 HttpServlet 但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多,    我们一般创建类继承HttpServlet 实现步骤: 1)创建类继 ...

  3. 目标检测论文解读6——SSD

    背景 R-CNN系列算法检测速度不够快,YOLO v1检测准确率较低,而且无法检测到密集目标. 方法 SSD算法跟YOLO类似,都属于one stage的算法,即通过回归算法直接从原图得到预测结果,为 ...

  4. Python实现感知器的逻辑电路(与门、与非门、或门、异或门)

    在神经网络入门回顾(感知器.多层感知器)中整理了关于感知器和多层感知器的理论,这里实现关于与门.与非门.或门.异或门的代码,以便对感知器有更好的感觉. 此外,我们使用 pytest 框架进行测试. p ...

  5. 修改Discuz!X系列开启防CC攻击,不影响搜索引擎收录

    最近网站一直被攻击,特别是新上线的交流社区,所以今天写了一个开启CC攻击防护代码,而且不影响搜索引擎收录. 在config_global.php文件中有如下代码: $_config['security ...

  6. JAVA并发-同步器AQS

    什么是AQS aqs全称为AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLo ...

  7. ajax post 提交无法进入controller 请求200

    最近写js遇到个问题: 用ajax的post方式给后台提交数据,页面200,但是不进入controller 断点,我以为我post参数不对. 网上查的: 1.说路径不对,但是我通过get方式是可以进入 ...

  8. Amoeba读写分离(MySQL)

    实验操作环境: centos服务器  三台机器 role: 192.168.189.129  master-主 192.168.189.130  master-从 192.168.189.131    ...

  9. LeetCode 568. Maximum Vacation Days

    原题链接在这里:https://leetcode.com/problems/maximum-vacation-days/ 题目: LeetCode wants to give one of its b ...

  10. 管理node.js的nvm

    我们坑同时在运行2个项目.而2个不同的项目所使用的node版本又不一样,或者是要用更新的node版本进行试验或学习.这种情况下,对于维护多个版本的node将会是一键非常麻烦的事情,而nvm就是为了解决 ...