C#通过代码配置运行mysql数据库(测试版本:mysql-8.0.15-winx64)

主要通过调用CMD配置mysql

分为三个核心步骤:

1.通过代码 在指定路径解压mysql文件(nuget 获取sharpzipXXX,跨卷拷贝要自己写递归文件拷贝),并将mysql的bin路径添加系统变量的path(可百度搜索C#如何添加环境变量)

2.代码创建数据库配置文件my.ini 要调用kernel.dll (可搜索如何通过C#创建ini文件)

3.重点讲调用cmd配置数据库 这部分花费时间较多

直接上代码:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace TestMysql
{
   public class CmdHelper
    {
        public void DealTheWholeCommand(string _CommandLine)
        {
            bool StandOutMark = false;
            bool StandErrorMark = false;
            //FunctionDetail.ShowInfo showinfo = new FunctionDetail.ShowInfo();
            Task task = new Task(() => {
                Process CmdProcess = new Process();
                //设置要启动的应用程序
                CmdProcess.StartInfo.FileName = "cmd.exe";
                //是否使用操作系统shell启动
                CmdProcess.StartInfo.UseShellExecute = false;
                // 接受来自调用程序的输入信息
                CmdProcess.StartInfo.RedirectStandardInput = true;
                //输出信息
                CmdProcess.StartInfo.RedirectStandardOutput = true;
                // 输出错误
                CmdProcess.StartInfo.RedirectStandardError = true;
                //不显示程序窗口
                CmdProcess.StartInfo.CreateNoWindow = true;
                //启动程序
                CmdProcess.Start();
              
                //向cmd窗口发送输入信息
                //p.StandardInput.WriteLine(CommandLine + "&exit");
                //获取输出信息
               
                Task taskForStandOut = new Task(()=> {
                    string ResultLine = string.Empty;
                    while (true)
                    {
                        Thread.Sleep(200);
                        ResultLine = CmdProcess.StandardOutput.ReadLine();
                        if (!string.IsNullOrEmpty(ResultLine))
                        {
                            Console.WriteLine(ResultLine);
                        }
                        
                        if (CmdProcess.StandardOutput.EndOfStream)
                        {
                            //Console.WriteLine("操作执行完成");
                            StandOutMark = true;
                            break;
                        }
                        
                    }
                });
                taskForStandOut.Start();

                Task taskForStandError = new Task(() => {
                    string ResultLine2 = string.Empty;
                    while (true)
                    {
                        Thread.Sleep(200);
                        ResultLine2 = CmdProcess.StandardError.ReadLine();
                        if (!string.IsNullOrEmpty(ResultLine2))
                        {
                            Console.WriteLine(ResultLine2);
                        }
                        
                        if (CmdProcess.StandardError.EndOfStream)
                        {
                            //Console.WriteLine("处理已完成");
                            StandErrorMark = true;
                            break;
                        }
                        
                    }
                });
                taskForStandError.Start();


                CmdProcess.StandardInput.WriteLine(_CommandLine + "&exit");
                CmdProcess.StandardInput.AutoFlush = true;
                while (true)
                {
                    if (StandErrorMark&&StandOutMark)
                    {
                        CmdProcess.WaitForExit();
                        CmdProcess.Close();
                        //Console.WriteLine("CMD已关闭");
                        CmdProcess = null;
                        break;
                    }
                    Thread.Sleep(500);
                }
            });
            task.Start();
            task.Wait();
        }
    }
}

上面是执行cmd配置数据库命令的核心代码。

 

调用的以及具体命令:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestMysql
{
    class Program
    {
        static void Main(string[] args)
        {
            CmdHelper cmdHelper = new CmdHelper();
            cmdHelper.DealTheWholeCommand("mysqld --install");
    
            cmdHelper.DealTheWholeCommand("mysqld --initialize-insecure --user=root --console");
            cmdHelper.DealTheWholeCommand("net start mysql");
            Console.ReadKey();
        }
    }
}

!!!可右键管理员权限运行也可以将C#项目设置成自动请求管理员权限 不然执行mysqld --install 以及net start mysql会提示权限问题

 

代码生成的my.ini内容如下:

 

[mysqld]
basedir="C:\WorkSpace\Testsetup\UfaceOffline\Mysql"
datadir="C:\WorkSpace\Testsetup\UfaceOffline\Mysql\data"
port=3306
server_id=10
character-set-server=gbk
character_set_filesystem=gbk
[client]
port=3306
default-character-set=gbk
[mysqld_safe]
timezone="CST"
[mysql]
default-character-set=utf8

测试系统为win10 ,测试前可先百度如何卸载mysql (由于是免安装版本 所以并未涉及注册表 卸载只需要卸载mysql服务 以及删除mysql根目录中的data文件夹即可)

!!!初始化语句中insecure会使得创建的mysql用户不包含密码 所以登录可不输入密码 直接回车 后期可通过连接数据库后执行

alter user user() identified by "123456" 修改密码

你可能感兴趣的:(C#)