绿色版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, 0, 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给转义了,下面的\\都是这个用途,防止转义。

posted @ 2019-04-03 11:13  踏平扶桑  阅读(522)  评论(2编辑  收藏  举报