当前位置: 首页 > news >正文

使用C#对指定的MYSQL数据库进行备份以及常见问题

最近在开发过程中,需要做个MYSQL数据库的备份,大致总结了一下代码,以及常见的坑

    string bakName = "database" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".sql";//备份后的数据库文件名var bakupFilePath ="D:\\MySqlData\\";//备份后的数据库文件保存目录 string databaseName = "test";//源数据库名称string userName = "root";//数据库服务器用户名string password = "admin123456";//数据库密码string host = "127.0.0.1";//源数据库所在服务器地址string port = "3306";//源数据库所在服务器端口//执行备份ProcessStartInfo processInfo = new ProcessStartInfo();processInfo.FileName = AppContext.BaseDirectory+"mysqldump.exe";//这里我把mysqldump.exe从MYSQL的bin目录下复制到了项目的生成目录中processInfo.Arguments = $"--host={host} --user={userName} --password={password} --port={port} --skip-opt {databaseName} --result-file={bakupFilePath + bakName}";//命令说明://--skip-opt必须注明,否则备份的文件中,每个表最多只能有一条插入语句processInfo.RedirectStandardOutput = true;processInfo.RedirectStandardError = true;processInfo.UseShellExecute = false;processInfo.CreateNoWindow = true;Process process = new Process();process.StartInfo = processInfo;try{process.Start();string output = process.StandardOutput.ReadToEnd();//运行结果,空字符串为正常结果errorMsg = process.StandardError.ReadToEnd();//异常信息process.WaitForExit();if (process.ExitCode != 0)//=0为成功,其他为失败{return false;}return true;catch (Exception ex){errorMsg = ex.Message;return false;}return false;

 主要问题排查:

1、运行到“string output = process.StandardOutput.ReadToEnd();”这一行时,一直卡在这里

问题原因:确定是因为Arguments里面的语句有问题,修改为正确的就行,可参照示例中

2、errorMsg结果是“mysqldump couldn t find table:">"”

问题原因: 我之前用的语句是这样:

--host={host} --user={userName} --password={password} --port={port} {databaseName} > {bakupFilePath + bakName}

这种写法在命令行中是可以的,但在C#代码里面,">"在命令中属于特殊字符,会被认为是表名字符。

解决方案有两个,一个是把“>”换成“-r”,以替代>,另一个就是把“>”换成“--result-file=”,以避免出现特殊字符

3、生成的数据库文件中,每张表只有一条插入语句

解决方案:在命令中加入--skip-opt 

http://www.lryc.cn/news/527503.html

相关文章:

  • 探索人工智能在计算机视觉领域的创新应用与挑战
  • Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)
  • STM32 对射式红外传感器配置
  • 12 款开源OCR发 PDF 识别框架
  • 危机13小时:追踪一场GitHub投毒事件
  • CVE-2020-0796永恒之蓝2.0(漏洞复现)
  • 游戏策划的分类
  • 单片机基础模块学习——PCF8591芯片
  • 深入探索 HTML5 拖拽效果 API:打造流畅交互体验
  • 【Healpix】python一种用于将球面划分为均匀区域的技术
  • Go:基于Go实现一个压测工具
  • 算法-加油站问题
  • UART ,IIC 和SPI三种总线协议
  • Padas进行MongoDB数据库CRUD
  • 动手学图神经网络(6):利用图神经网络进行点云分类
  • C语言从入门到进阶
  • Python中容器类型的数据(下)
  • MySQL 用户相关的操作详解
  • 如何删除hugging face dowloaded的llm model?
  • Vue 封装http 请求
  • 恒源云云GPU服务器训练模型指南
  • Spring Boot应用中实现基于JWT的登录拦截器,以保证未登录用户无法访问指定的页面
  • MySQL 基础学习(1):数据类型与操作数据库和数据表
  • zyNo.19
  • Kafka生产者ACK参数与同步复制
  • IPhone14 Pro 设备详情
  • 【Linux】磁盘
  • Shell编程(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)
  • 强化学习数学原理(三)——值迭代
  • Day27-【13003】短文,什么是栈?栈为何用在递归调用中?顺序栈和链式栈是什么?