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