1.      /// <summary>
  2. /// 安装并开启服务
  3. /// </summary>
  4. public static bool InitAndStartService(string serviceName, string mysqliniPath, string mysqlPath, string mysqlBinPath, string mysqlDataPath)
  5. {
  6. try
  7. {
  8. A_InitDataBase(mysqlBinPath);
  9. B_ResetMySqlConfig(mysqliniPath, mysqlPath, mysqlDataPath);
  10. C_InstallService(mysqlBinPath, serviceName, mysqliniPath);
  11. D_StartService(serviceName);
  12. E_SetDefaultPassword(mysqliniPath, api.MySqlPassword);
  13. }
  14. catch (Exception ex) { api.logger.addToLog(ex, "InitAndStartService方法出错!"); return false; }
  15. return true;
  16. }
  17.  
  18. /// <summary>
  19. /// 初始化数据库,如果已经发生过初始化,则不会再初始化,注意,初始化完成后是空密码。
  20. /// </summary>
  21. /// <param name="mysqlBinPath"></param>
  22. /// <returns></returns>
  23. public static void A_InitDataBase(string mysqlBinPath)
  24. {
  25. if (!Directory.Exists(api.MysqlDataPath))
  26. {
  27. try { Directory.CreateDirectory(api.MysqlDataPath); } catch { }
  28. }
  29. //新建初始数据库
  30. var log = exec.RunCmd(mysqlBinPath, "mysqld --initialize-insecure --console").Trim();//--user=mysql
  31. api.logger.addToLog("A_InitDataBase方法日志:\r\n" + log);
  32. }
  33. /// <summary>
  34. /// 配置数据库ini文件,在初始化之后,启动服务之前调用。
  35. /// </summary>
  36. public static void B_ResetMySqlConfig(string mysqlIniPath, string mysqlPath, string mysqlDataPath)
  37. {
  38. IniHelper ini = new IniHelper(mysqlIniPath);
  39. ini.Write("mysqld", "basedir", (mysqlPath + "").TrimEnd('\\'));
  40. ini.Write("mysqld", "datadir", (mysqlDataPath + "").TrimEnd('\\'));
  41. }
  42.  
  43. /// <summary>
  44. /// 安装服务,会执行卸载再装。
  45. /// </summary>
  46. public static void C_InstallService(string mysqlBinPath, string serviceName, string mysqliniPath)
  47. {
  48. exec.RunCmd(mysqlBinPath, string.Format("mysqld.exe -remove {0}", serviceName));
  49. var log = exec.RunCmd(mysqlBinPath, string.Format("mysqld.exe -install {0} --defaults-file=\"{1}\"", serviceName, mysqliniPath));
  50. api.logger.addToLog("C_InstallService方法日志:\r\n" + log);
  51. }
  52. /// <summary>
  53. /// 启动服务
  54. /// </summary>
  55. public static bool D_StartService(string serviceName)
  56. {
  57. //return Cocon90.Lib.Util.Window.Service.ServiceHelper.StartService(serviceName, TimeSpan.FromSeconds(10));//开启服务
  58. try
  59. {
  60. ServiceController[] services = ServiceController.GetServices();
  61. ServiceController service = services.Where(p => p.ServiceName == serviceName).FirstOrDefault();
  62. if (service == null) return false;
  63. service.Start();
  64. service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds());
  65. return service.Status == ServiceControllerStatus.Running;
  66. }
  67. catch (Exception ex) { api.logger.addToLog(ex, "D_StartService方法出错:"); return false; }
  68. }
  69.  
  70. /// <summary>
  71. /// 设置初始密码。将空密码修改为指定密码。
  72. /// </summary>
  73. public static bool E_SetDefaultPassword(string mysqliniPath, string newPassword)
  74. {
  75. var port = GetDbPort(mysqliniPath);
  76. return sql.SetDefaultPassword(port, "", newPassword);
  77. }
  78. /// <summary>
  79. /// 检测数据库是否存在(或者已初始化过)
  80. /// </summary>
  81. public static bool GetIsDbFileExisted(string mysqlDataPath)
  82. {
  83.  
  84. return !(!Directory.Exists(mysqlDataPath) || Directory.GetFiles(mysqlDataPath).Length == || !Directory.Exists(Path.Combine(mysqlDataPath, "mysql"))); //检查目录下有无文件,或数据目录下有无mysql文件夹
  85. //if (ifNotExistIsInit)
  86. //{
  87. // //新建初始数据库
  88. // string log = exec.RunCmd(mysqlBinPath, "mysqld --initialize-insecure --user=mysql --console").Trim();
  89. // if (log.Length > 12)
  90. // {
  91. // //获得初始密码
  92. // initPassword = log.Substring(log.Length - 12, 12);
  93. // }
  94. //}
  95. }
  96. /// <summary>
  97. /// 获取当前端口
  98. /// </summary>
  99. public static string GetDbPort(string mysqlIniPath)
  100. {
  101. IniHelper ini = new IniHelper(mysqlIniPath);
  102. return ini.Read("mysqld", "port");
  103. }
  1.     public static bool SetDefaultPassword(object port, object initPassword, string newPassword)
  2. {
  3. string connStr = string.Format("server=localhost;user=root;port={0};password='{1}';logging=true;", port, initPassword);
  4. MySqlConnection conn = new MySqlConnection(connStr);
  5. try
  6. {
  7. conn.Open();
  8. var command = new MySqlCommand(string.Format("alter user 'root'@'localhost' identified by '{0}';", newPassword), conn);
  9. var eff = command.ExecuteNonQuery();
  10. conn.Close();
  11. return true;
  12. }
  13. catch (Exception ex)
  14. {
  15. conn.Close();
  16. return false;
  17. }
  18. }

MySql服务初始化、安装、启动的更多相关文章

  1. mysql 服务【安装】【启动】【停止】【卸载】【重置密码】

    windows安装:一.一机安装多个服务时,重复步骤,修改服务名即可: 1.mysqld install mysql_12336 --defaults-file="MYSQL_HOME\my ...

  2. mysql 服务windows安装

    找到mysql的bin目录,下面有一个mysqld.exe程序,这是用来启动mysql服务的,直接运行即可启动. 还有安装windows服务方式: mysqld.exe -install -manua ...

  3. mysql服务端安装的系列问题处理

    1.mysql服务无法启动,报1067错误 注意:mysql服务端加压之后的文件名最好不要带其他符号(如:"_"之类等其他的一些符号),用纯英文跟数字就可以,没有经过仔细验证带符号 ...

  4. WAMP中mysql服务突然无法启动 解决方法

    wamp的mysql服务前两天还能用,今天突然不能无法启动了,原因可能是近期电脑强行关机,删除wamp\bin\mysql\mysql5.6.17\data目录下的ib_logfile0和ib_log ...

  5. MariaDB/MySql 服务消失无法启动

    今天启动电脑打开数据库发现这么一个错误:  2003 can't connect to mysql server on localhost 10038  无奈去查看了服务,发现mysql服务消失了,猜 ...

  6. 关于MySQL服务无法正常启动问题

    使用mysql的时候,突然查看服务列表也找不到mysql服务 解决办法: 一.首先打开CMD,切换到MySql安装目录的MySql Server →bin目录下 运行如下命令(具体试个人安装的MySq ...

  7. 7_linux下PHP、Apache、Mysql服务的安装

    1.首先安装之前,要确保你的虚拟机能连上外网. Mysql: 1.yum -y install mysql   连接数据库命令行模式 2.yum install mysql-server  安装mys ...

  8. mysql服务里面没有启动项

    解决:5.0版本:开始->运行->cmd,进到mysql安装的bin目录D:\MySQL\bin>mysqld.exe -installService successfully in ...

  9. mysql数据库初始化(启动mysql时候报很多错误,初始化)

    ./mysql_install_db --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/us ...

  10. MySQL Install--CentOS 7配置MySQL服务和开启启动

    创建MySQL服务 编辑文件: vim /usr/lib/systemd/system/mysql.service 录入下面内容: PS: 注意修改ExecStart脚本 [Unit]Descript ...

随机推荐

  1. 血族第四季/全集The Strain迅雷下载

    当第四季开始时,故事时间已经过去九个月.世界陷入黑暗,斯特里高伊吸血鬼控制了一切.第三季结尾的爆炸引发了一场全球核灾难,核冬天的到来令地表变得暗无天日,斯特里高伊获得解放.它们大白天也能出来活动,帮助 ...

  2. Android 开发:由模块化到组件化(一)

    在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发背后的哪些事.最早是在广告SDK中应用组件化,但是同样适用于普通应用开发 以下高能,请做好心理准备,看不懂请发私信来交流 ...

  3. Binary Search Tree 以及一道 LeetCode 题目

    一道LeetCode题目 今天刷一道LeetCode的题目,要求是这样的: Given a binary search tree and the lowest and highest boundari ...

  4. [转]Windows 下 Apache Virtual hosts 简单配置

    From : http://blog.csdn.net/wuerping/article/details/4164362 /* Author : Andrew.Wu [ Created on : 20 ...

  5. dockerfile介绍

    详细说明,阅读这篇文章吧:https://yeasy.gitbooks.io/docker_practice/image/build.html 注意点: 容器是一个进程,不是一个系统 dockerfi ...

  6. Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口 ...

  7. C#邮件发送(最坑爹的邮箱-QQ邮箱)

    最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮件发送相信工作过基本上都会用到过,用户注 ...

  8. Safari不兼容Javascript中的Date问题

    在IOS5以上版本(不包含IOS5)中的Safari浏览器能正确解释出Javascript中的 new Date('2013-10-21') 的日期对象,但是在IOS5版本里面的Safari解释new ...

  9. IOS 多线程 NSThread

    一个正在运行的应用程序是一个进程,一个进程会默认开启一个主线程,但是在主线程中的操作是串行的,也就是当有多个任务同时需要完成的时候,是按照顺序一个个执行.因此,为了提高效率,会在进程中开启多个线程,每 ...

  10. TNTSearch 轻量级全文索引 + 中文分词

    TNTSearch 轻量级全文索引+中文分词 选用 TNTSearch 的原因:轻,方便移植,不需要额外安装服务,能减少后期维护的工作量.搜索的效果也还不错,可以满足大多数项目场景,如果对性能和精准度 ...