绿色版Mysql自动建立my.ini和命令行启动并动态指定datadir路径

前端之家收集整理的这篇文章主要介绍了绿色版Mysql自动建立my.ini和命令行启动并动态指定datadir路径前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、先去下载绿色版的MysqL(https://cdn.MysqL.com//archives/MysqL-5.7/MysqL-5.7.20-winx64.zip)

2、解压缩到任意目录(如D:\MysqL),并保证此目录是根目录,即访问bin目录的访问路径是(D:\MysqL\bin)

3、在D:\MysqL下建立一个文本文件(编码格式为ANSI,不要Utf8格式,否则会乱码)

4、写入以下批处理代码

echo off
del my.ini
echo [MysqLd]>>my.ini
echo port=3306>>my.ini
echo character-set-server=utf8mb4>>my.ini
echo default-storage-engine=INNODB>>my.ini
set CURRENT_DIR=%CD%
set CURRENT_DIR=%CURRENT_DIR:\=\\%
echo basedir="%CURRENT_DIR%\\">>my.ini
echo datadir="%CURRENT_DIR%\\data\\">>my.ini
echo "set  basedir parameter coplete"
cd %CURRENT_DIR%\bin
MysqLd --install MysqL --defaults-file="%CURRENT_DIR%\\my.ini"

5、重命名新建的文本文件为批处理文件名格式,如 1.txt重命名为 1.bat

6、双击运行1.bat,如果没有报错,则运行成功,可以通过数据库管理客户端连接。

7、使用C#代码在程序中自动注册(运行上面的bat批处理)MysqL服务和启动MysqL服务(WPF环境下,如其它环境,则去掉Wpf下的关键字即可使用,前提是有权限调用cmd和有权限安装服务)

try
{
    //安装服务
    var proc = new Process();
    var info = new ProcessStartInfo("cmd.exe")
    {
        WorkingDirectory = $@"{AppDomain.CurrentDomain.BaseDirectory}\MysqL\",FileName = $@"{AppDomain.CurrentDomain.BaseDirectory}\MysqL\runMysqL.bat",UseShellExecute = true,WindowStyle = ProcessWindowStyle.Hidden,CreateNoWindow = true
    };

    proc.StartInfo = info;
    proc.Start();
    //var output = proc.StandardOutput.ReadToEnd();//读取进程的输出 
    //Console.WriteLine(output);
    proc.WaitForExit();
    Dispatcher?.Invoke(() =>
    {
        lb_info.Text += @"【成功】" + Environment.NewLine;
    });
}
catch (Exception ex)
{
    App.Log4Helper.Error("服务安装失败:" + ex.Message);
    App.Log4Helper.Error(ex.Message);
    Dispatcher?.Invoke(() =>
    {
        lb_info.Text += @"【失败】" + Environment.NewLine;
    });
}
//启动服务
var serviceController = new ServiceController("MysqL");
if (serviceController.Status != ServiceControllerStatus.Running)
{
    Dispatcher?.Invoke(() =>
    {
        lb_info.Text += @"数据库启动...";
    });

    try
    {
        serviceController.Start();
        serviceController.WaitForStatus(ServiceControllerStatus.Running,new TimeSpan(0,15));
        if (serviceController.Status != ServiceControllerStatus.Running)
        {
            MessageBox.Show(@"数据库服务启动失败,请检查数据库服务配置文件。","错误",MessageBoxButton.OK,MessageBoxImage.Error);
            Environment.Exit(0);
            return;
        }
        Dispatcher?.Invoke(() =>
        {
            lb_info.Text += @"【成功】" + Environment.NewLine;
        });
    }
    catch (Exception ex)
    {
        App.Log4Helper.Error("数据库启动失败:" + ex.Message);
        App.Log4Helper.Error(ex.Message);
        Dispatcher?.Invoke(() =>
        {
            lb_info.Text += @"【失败】" + Environment.NewLine;
        });
    }
}

PS: set CURRENT_DIR=%CURRENT_DIR:\=\\%  这句的意思是把目录里面所有\转换成\\,防止遇到类似于 \bin这种目录路径的时候把\b给转义了,下面的\\都是这个用途,防止转义。

猜你在找的C#相关文章