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

使用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.kler.cn/a/516359.html

相关文章:

  • 网络安全大模型和人工智能场景及应用理解
  • Android核心组件——Activity
  • 虹科分享 | 汽车NVH小课堂之听音辨故障
  • three.js+WebGL踩坑经验合集:写在前面的话
  • ubuntu20.04安装使用direct_visual_lidar_calibration标定雷达和相机
  • 基于 Android 的校园闲置物品交易平台设计与实现
  • 深度探索 DeepSeek-R1:国产大模型的AGI雏形与创新进展
  • 【openwrt】openwrt odhcpd配置介绍
  • opengrok_使用技巧
  • JAVA:中介者模式(Mediator Pattern)的技术指南
  • 【C语言系列】深入理解指针(3)
  • 计算机视觉算法实战——无人机检测
  • 【7】如何给Autonomous AP创建SSID
  • Oracle系列---【如何修改Oracle字符集?】
  • Jenkins上生成的allure report打不开怎么处理
  • 使用 JMeter 的 Autostop Listener 插件:自动化性能测试的守护者
  • 使用uPyCraft 来进行MicroPython ESP32创作
  • 如何通过windows自带的 mstsc 工具远程连接电脑
  • 高并发处理 --- 超卖问题+一人一单解决方案
  • 微信小程序隐藏右侧胶囊按钮,分享和关闭即右侧三个点和小圆圈按钮